2017-04-24 48 views
0

我有一個幀的三個按鈕,其中的兩個欲編輯與字符串,它是在主類(Lab2TestDrive)包裝公共部件,像在同一類中實現ActionListener爲三個按鈕

public class Lab2TestDrive{ 
... 
String cale; 

public static main void(String[] args){ 
    JButton button1.. button2.. button3.. 

} 

我可以在Lab2TestDrive上實現一個ActionListener,並覆蓋那裏的actionPerformed(...)方法嗎?但如果我這樣做,我不知道我怎麼能知道哪個按鈕觸發了actionPerformed方法。

我知道我可以做一個單獨的類,

public class ButtonListener implements ActionListener { 
    JButton button; 
    ButtonListener(JButton button){ 
     this.button = button; 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     if(button.getText().equals("Save")){ 

     }; 

    } 
} 

但是當時我不知道我怎麼能訪問「卡爾」變量:(

+1

您可以使用按鈕或「動作」API的「actionCommand」參見[如何使用動作](http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) – MadProgrammer

回答

1

第一:你不應該讓你的ActionEvent被稱爲arg0

然後:技術上可以做到這一切在一個類你ActionEvent參數有一個名爲getSource()方法,這將讓你觸發事件的按鈕

理論上,您也可以創建第三個類來存儲您的cale變量,並將該類的引用作爲偵聽器構造函數的參數。

但是,這看起來很不直觀。

您也可以參考您的Lab2TestDrive對象給您的Listener的構造函數,然後在您的actionPerformed中調用該類的方法。

真相被告知,這些選項都沒有真正打擊我作爲偉大的編碼實踐,但他們都應該工作。

+0

工作,謝謝。我決定堅持主要類中的actionListener,與其他兩種方法相比,它沒有什麼麻煩 –

相關問題