2012-05-04 82 views
2

有沒有辦法獲得我們用這種方式聲明的價格價值?JButton添加屬性

JButton button = new javax.swing.JButton(){ 
    public int value=0; 
} 

button.addActionListener(listener); 
//in action listener 
public void ActionPerformed(ActionEvent evt){ 

JButton btn = (JButton)evt.getSource(); 
btn.value =2; //error 
} 
+2

actionPerformed是小寫,必填。縮進會很好。 –

回答

4

您不能在實例本身之外訪問匿名類的屬性/方法。

原因是編譯器知道btn是JButton,而不是你的擴展名,並且你不能強制轉換爲這個擴展名,因爲它沒有名字。

你需要在一個單獨的文件中創建一個內部類或類並創建實例,例如:

static class MyButton extends JButton { 
    public int value=0; 
} 

// .... 
MyButton btn = new MyButton(); 
btn.addActionListener(listener); 
// .... 

@Override public void actionPerformed(ActionEvent evt){ 
    MyButton btn = (MyButton)evt.getSource(); 
    btn.value = 2; 
} 
+0

謝謝。我在這方面很新,而且我從來沒有見過擴展另一個Class的靜態類。在這種情況下它有什麼變化? – user1306777

+1

如果這是一個內部類,則使用關鍵字static來完成,以避免爲每個實例創建類本身。主要的變化是我們現在有這樣一個類的名稱,我們沒有使用它,所以我們可以引用它的屬性。 – MByD

0

你可以做的是使用Component.setName()來保存至少一個字符串與零件。