2014-05-20 100 views
0
button1.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent ae) { 
       exite.setEnabled(true); 
      } 

     }); 

button2.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent ae) { 
       exite.setEnabled(true); 
      } 

     }); 


button3.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent ae) { 
       exite.setEnabled(true); 
      } 

     }); 

我在這裏有3個按鈕,但他們正在做同樣的事情。它在代碼中佔用一些空間。我如何將它們全部分組並分配給一個ActionListener?如何將一個Action Listener分配給幾個按鈕?

就是這樣。我不知道應該如何。

button1.button2.button3.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent ae) { 
       exite.setEnabled(true); 
      } 

     }); 
+0

創建一個擴展的ActionListener類(或者implements ..),然後分配該類的一個實例.. –

回答

6

剛分配ActionListener在不同的變量第一:

ActionListener listener = new ActionListener() { 
    ... 
}; 
button1.addActionListener(listener); 
button2.addActionListener(listener); 
button3.addActionListener(listener); 

這只是畢竟是一個參考 - 唯一的「特殊」這裏的東西是使用匿名內部類中創建一個實例ActionListener

如果您想對所有按鈕執行多種操作,那麼您可能希望將它們放入一個集合中,而不是爲它們分配三個變量。

2

中庸之道創建一個變量:-)

ActionListener listener = new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent ae) { 
     exite.setEnabled(true); 
    } 
}; 
button1.addActionListener(listener); 
button2.addActionListener(listener); 
button3.addActionListener(listener); 
2
ActionListener listener = new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent ae) { 
      exite.setEnabled(true); 
     } 

    }; 

button1.addActionListener(listener); 
button2.addActionListener(listener); 
button3.addActionListener(listener); 
0

在你的類實現ActionListener

public class YourClass implements ActionListener 

那你應該有它可以在一個地方實現一個actionPerformed方法處理你的所有行爲。 你addActionListener行應該再成爲:

button1.addActionListener(this); 
button2.addActionListener(this); 

然後使用:

public void actionPerformed(ActionEvent event) { 
    if(event.getSource() == button1 || event.getSource() == button2 || event.getSource() == button3) { 
     exite.setEnabled(true); 
    } 
} 
0

您可以創建一個實現了Jbutton將在ActionListener的一類稱爲事件。然後使用參數getCommand()方法來獲得一個JButton的文本和創造,如果爲所有基於將JButton具有文本按鈕的語句,代碼爲:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.* 
public class MultipleJButtons extends JFrame { 
    JButton button1, button2, button3; 
    public static void main(String args[]) { 
     MultipleJButtons gui = new MultipleJButtons(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.pack(); 
     gui.setTitle("Multiple Buttons"); 
     gui.setVisible(true); 
    } 
    public MultipleJButtons() { 
     event e = new event(); 
     setLayout(new FlowLayout()); 
     button1 = new JButton("Button 1"); 
     add(button1); 
     button1.addActionListener(e); 

     button2 = new JButton("Button 2"); 
     add(button2); 
     button2.addActionListener(e); 

     button3 = new JButton("Button 3"); 
     add(button3); 
     button3.addActionListener(e); 
    } 
    public class event implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      String command = e.getActionCommand(); 
      if (command.equals("Button 1")) { 
       System.out.println("You pressed button 1"); 
      } else if (command.equals("Button 2")) { 
       System.out.println("You pressed button 2"); 
      } else if (command.equals("Button 3")) { 
       System.out.println("You pressed button 3"); 
      } 
    } 
相關問題