2013-05-26 42 views
0

我有一個帶2個JButton的GUI,我想通過使用getSource方法知道哪一個正在觸發一個事件。我找遍了整個谷歌爲解決我的問題,但無法找到一個,這裏是我的代碼:在按鈕上使用getSource方法遇到問題

@Override 
public void actionPerformed(ActionEvent event){ 
    if (event.getSource() == btn1){ 
     System.out.println("this should work"); 
    }else if (event.getSource() == btn2){ 
     System.out.println("this should work as well"); 
    } 

但是當我按下其中一個按鈕未打印任何東西,我也試過這樣:

@Override 
public void actionPerformed(ActionEvent event){ 
    if ((JButton)event.getSource() == btn1){ 
     System.out.println("this should work"); 
    }else if ((JButton)event.getSource() == btn2){ 
     System.out.println("this should work as well"); 
    } 

但這也沒有工作。

有人可以告訴我什麼是錯?

+1

我不知道在這種情況下它是否有所不同,但是,您是否嘗試過'equals()'而不是'=='? – acdcjunior

+0

嘗試System.out.println(event.getSource)來檢查源是什麼 – BlackJoker

+0

設置斷點並手動檢查event.getSource()返回的值。 –

回答

0

我建議使用2個不同的ActionListener至UR按鈕,所以üdont有(如果有的話)

btn.addActionListener(new MyActionListener1()); 
btn2.addActionListener(new MyActionListener2()); 

但如果你想測試你的問題,我建議你宣佈你的變量btn1和btn2 作爲最終。

final JButton btn1= new JButton(); 
final JButton btn2= new JButton(); 

所以你可以確保你的變量是全指向「指向」相同的位置。另一件事ü可以做的就是屬性名設置的按鈕,這樣你們可以與物業

btn1.setName("name"); 

,並在ActionListener的

@Override 
public void actionPerformed(ActionEvent event){ 
    if (btn1.getName().equals(((Component)event.getSource()).getName()){ 
     System.out.println("this should work"); 
     .... 
+0

謝謝你們所有人的幫助,感謝你。我對Java很陌生,沒有太多經驗 – user2421549

+0

希望它幫助:) – nachokk

+0

@ user2421549請接受答案。 – nachokk

0

問題與您的代碼:

btn1btn2不指向堆中相同的按鈕實例。意思是他們不一樣。這將不會打印任何內容,因爲即使您的else也具有相同的條件。

解決方案

使用文字上的按鈕來檢測按下了哪個按鈕:

((JButton)event.getSource()).getText().equals("mybutton") 
+0

它沒有爲我工作..與單動作偵聽器一樣的事情。 – sathya

0

我有同樣的問題做了等號。 後來我意識到我正在初始化相同的按鈕2次。

在我用

按鈕B1,B2上的類;

,後來在構造函數的初始化方法 我因爲這樣寫道:B1

Button b1=new Button(); 
Button b2=new Button(); 

這是錯誤的,B2會指出走向新的地址。

在構造函數的初始化方法寫入正確的方法是:

b1=new Button(); 
b2=new Button(); 

這樣的變量將舉行新的按鈕類和地址的對象將不會被改變。

希望這會有所幫助。

相關問題