2014-06-13 56 views
-2

我班的樣子:如何從內部類訪問我班的字段?

public class Suwak extends JFrame { 
    JSlider slider; 
    JLabel lblWartosc; 
    static int wartosc=0; 

    public Suwak() { 
    event e = new event(); 
    slider.addChangeListener(e); 
    } 

    public class event implements ChangeListener { 
    public void stateChanged(ChangeEvent e) { 
     wartosc = slider.getValue(); 
     lblWartosc.setText("Wartosc:"+ wartosc); 
     } 
    } 
} 

我有另一個類Operationsmethod1(int wartosc)。當我使用該方法時,如何參考Suwak的成員變量wartosc,以便它可以在內部類中使用。

我試着在Operation類做到這一點:

Suwak slider = new Suwak(); 
method1(slider.slider.getValue()); 

,但是這隻能說明一個變量。

+0

您有問題要問? –

+0

看起來像'wartosc'是在外部類中聲明的。 – shmosel

+0

是在outher中聲明,但內心的變化我想從內部類事件中獲取'wartosc' – user3618304

回答

1

如果我理解正確,您希望能夠使用可以訪問Suwak的成員變量的更改偵聽器(內部類)設置Suwak,並且您希望能夠從其他類中執行此操作,可能在Suwak s套餐之外。

最簡潔(imo)方法是在構建它時將對您的Suwak實例的引用傳遞到您的event實例中。這保留了封裝;您的Operations班級不必知道任何關於Suwakevent的成員變量。

在這個例子中,我打算將event類重命名爲SuwakChangeListener,因爲event是一個令人困惑的名字。

在你Suwak類:

static int wartosc; // Class variable 
JLabel lblWartosc; // Member variable 

public Suwak() { 
    // Pass reference to Suwak instance into SuwakChangeListener's constructor 
    SuwakChangeListener e = new SuwakChangeListener(this); 
    slider.addChangeListener(e); 
    System.out.println(wartosc); 
} 

public class SuwakChangeListener implements ChangeListener { 
    Suwak instance; 

    /** 
     * @param suwakInstance The instance of Suwak that this change listener is working with. 
     */ 
    SuwakChangeListener(Suwak suwakInstance) { 
     // Remember the instance. 
     instance = suwakInstance; 
    } 

    public void stateChanged(ChangeEvent e){ 
     // This accesses the class variable of Suwak. 
     Suwak.wartosc = slider.getValue(); 
     // This accesses the member variable of instance. 
     instance.lblWartosc.setText("Wartosc:"+ Suwak.wartosc); 
    } 
} 

一般情況下,最好是如果訪問者(吸氣)和修改器(setter方法)的使用,而不是直接訪問成員和類變量。但這兩種方式都有效。