Java在单独的类上添加ActionListener

Java在单独的类上添加ActionListener,java,swing,jframe,actionlistener,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 } 谢谢您

下面是我想做的,其中一个类用于包含所有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

}

谢谢您的时间。

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

public class Frame extends JFrame {
    JButton testButton;

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

        this.add(testButton);
    }
}

1。您可以使用
内部类
匿名内部类
来解决此问题

例如:

内部类

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.
          } 


   });

    }
例如:

匿名内部类

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.
          } 


   });

    }

如果希望一个相同的
侦听器实例
侦听帧中的所有按钮,则必须使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) {...}
}
在Java7中,这将变得更容易,您可以在其中切换字符串!
按钮单击的ActionCommand将是
JButton
文本属性,除非您另外设置它

Listener类如何?
testButton.addActionListener(new Listener())我们正在创建它的一个实例。@执行此操作时,Ewen Listener是一个接口而不是一个类。。addActionListener(新的ActinoListener());您正在创建一个实现接口ActionListener的匿名类。。。在他的代码示例中,他显然有一个名为
listener
的类,该类正在实现
ActionListener
。您不必对所有内容都使用匿名内部类,让外部类实现
ActionListener
也没有什么错。你可以很好地创建它的一个实例。@JeffS,没错。。。。不必创建匿名类,我们当然可以创建另一个实现ActionListener的类,并在使用按钮注册时传递其实例。我在澄清Ewen对匿名类的怀疑在一个有点相关的注释中,你可能想为你的类选择不同的名称。Java约定有以大写字母开头的类,但是
Frame
Listener
都是Java中的类,因此如果包含该包,则会出现名称冲突。像Kumar的
MyListener
这样的东西会起作用,或者更好的做法是根据它们的功能来命名它们。实际上这是个好主意,但在不同的类上进行侦听的目的是不要使frame类太长和混乱。如何将action listener添加到扩展button的类中?抱歉,这不是我要求的。