Java在单独的类上添加ActionListener
下面是我想做的,其中一个类用于包含所有jbutton的JFrame,我希望另一个类侦听在JFrame类上执行的操作。 请参阅下面的代码: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 } 谢谢您
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的类中?抱歉,这不是我要求的。