Java在单独的类上添加ActionListener

时间:2012-08-09 17:06:55

标签: java swing jframe actionlistener

继承人我想做什么,其中一个类是包含所有JButton的JFrame,我想要另一个类来监听在JFrame类上进行的操作。 请参阅以下代码:

public class Frame extends JFrame{
    //all the jcomponents in here

}

public class listener implements ActionListener{
    //listen to the actions made by the Frame class

}

感谢您的时间。

3 个答案:

答案 0 :(得分:5)

只需将侦听器的新实例添加到您想要侦听的任何组件即可。任何实现ActionListener的类都可以作为侦听器添加到组件中。

public class Frame extends JFrame {
    JButton testButton;

    public Frame() {
        testButton = new JButton();
        testButton.addActionListener(new listener());

        this.add(testButton);
    }
}

答案 1 :(得分:3)

1。您可以使用Inner ClassAnonymous Inner Class来解决此问题....

<强>例如

内部班级

public class Test{

 Button b = new Button();


 class MyListener implements ActionListener{

       public void actionPerformed(ActionEvent e) {

                    // Do whatever you want to do on the button click.
      } 

   }
}

<强>例如

匿名内部课程

public class Test{

     Button b = new Button();

     b.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e) {

                        // Do whatever you want to do on the button click.
          } 


   });

    }

答案 2 :(得分:1)

如果您希望同一个listener实例监听框架中的所有按钮,则必须使actionPerformed方法根据命令收集所有点击和委托:

public class listener extends ActionListener{
    public void actionPerformed(ActionEvent e){
        String command = e.getActionCommand();
        if (command.equals("foo")) {
            handleFoo(e);
        } else if (command.equals("bar")) {
            handleBar(e);
        }
    }

    private void handleFoo(ActionEvent e) {...}
    private void handleBar(ActionEvent e) {...}
}

这将在Java 7中变得更容易,您可以在其中切换字符串! 单击按钮的ActionCommand将是Text的{​​{1}} - 属性,除非您另外设置