2011-05-06 71 views
4

我知道如何爲它創建一個按鈕和一個Action Listener。但是我想爲他們做好幾個按鈕和actionListeners,分別執行彼此無關的操作。如何在Java Swing中爲多個按鈕添加多個ActionListeners

例子:

protected JButton x; 

x = new JButton("add"); 
x.addActionListener(this); 

public void actionPerformed(ActionEvent evt) { //code.....} 

現在,我想有可能甲肝不同的功能,如減,乘等 請建議其他按鈕。謝謝

+0

不要使用ActionListener,請使用Action inste廣告:它的一般規則是總是去爲最高抽象可用 – kleopatra 2011-05-06 13:00:40

回答

11

什麼:

JButton addButton = new JButton(new AbstractAction("add") { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      // add Action 
     } 
    }); 

    JButton substractButton = new JButton(new AbstractAction("substract") { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      // substract Action 
     } 
    }); 
+0

+1的所有答案。 @oliholz使用Actions的很好例子。 – Boro 2011-05-06 12:52:29

+0

非常感謝。過去幾天我一直在尋找這件事,而且找不到它。 – JavaBits 2011-05-08 18:36:33

1

您只需要每次創建ActionListener的新實例。 由於很多原因,建議使用Action來代替。

這裏是很好的資源這也解釋了爲什麼你應該使用過的ActionListeners操作走,一個Java教程題爲How to Use Actions

編輯:@fmucar是正確的,你可以做到這一切在一個單一的ActionListener。雖然具有獨立的功能性操作可以讓您獨立重用它們。

4

您可以使用ActionEvent.getSource()來決定來源並相應採取行動,或者您可以爲它們中的每一個定義不同的ActionListeners

+0

:)不是廣告,只是告訴可能的方式做 – fmucar 2011-05-06 13:58:15

7

使用內部類:

x = new JButton("add"); 
x.addActionListener(
    new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     //your code here 
    } 
    } 
); 
1

您可以創建不同的動作偵聽器的情況下,不使用類:

x.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { ... } 
}); 

還有一些其他的方法來創建動作偵聽器,就像任何一類,但對於短時間的操作(匿名類)來說是一個很方便的方法。

0

怎麼樣......

protected JButton x, z, a, b,c; 

x = new JButton("add x"); 
z = new JButton("add z"); 
a = new JButton("add a"); 
b = new JButton("add b"); 
c = new JButton("add c"); 
x.addActionListener(this); 
z.addActionListener(this); 
a.addActionListener(this); 
b.addActionListener(this); 
c.addActionListener(this); 

然後

public void actionPerformed(ActionEvent evt) 
{ 
    if (evt.getSource()==x) 
     { 
      //do something 
     } 
    else if (evt.getSource()==z) 
     { 
      //do something 
     } 
    else if (evt.getSource()==a) 
     { 
      //do something 
     } 
    else if (evt.getSource()==b) 
     { 
      //do something 
     } 
    else if (evt.getSource()==c) 
     { 
      //do something 
     } 
} 

這始終是對我的作品,但老實說,我不知道這是否是不錯練習

相關問題