2014-05-20 2 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에 할당 할 수 있습니까?두 개의 단추에 하나의 동작 수신기를 할당하는 방법은 무엇입니까?

이와 비슷한 것. 나는 그것이 어떻게되어야하는지 모른다. - 여기에 전용 "특별한"일이 인스턴스를 만들 수있는 익명의 내부 클래스를 사용하는 것입니다

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

그것은 결국 단지 참조입니다 :

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

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

     }); 
+0

는 ActionListener를 확장하는 클래스를 만들 (또는 구현합니다.) 그런 다음 해당 클래스의 인스턴스를 할당합니다. –

답변

6

그냥 먼저 다른 변수에 ActionListener을 할당 ActionListener.

모든 버튼에 대해 여러 가지 작업을 수행하려는 경우 3 개의 별도 변수를 사용하는 대신 컬렉션에 넣을 수 있습니다.

2

Juste는

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를 구현 변수 :-)를 만들

당신이 어디에 할 수있는 하나 개의 장소에 actionPerformed 방법을 구현해야해야
public class YourClass implements ActionListener 

모든 행동을 처리하십시오. 귀하의 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를 구현하는 클래스라는 이벤트를 만들 수 있습니다. JButton에가 가지고있는 텍스트를 기반으로 모든 버튼에 대한 문, 코드가 될 경우 그 다음의 JButton의 텍스트를 얻고 생성 매개 변수 getCommand() 메소드를 사용

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"); 
      } 
    } 
관련 문제