简单的Java的ActionListener的问题
-
18-09-2019 - |
题
我有一个启动另一类处理所有的GUI东西的程序的主类。 在GUI中,我有一个按钮,我需要一个ActionListener附加到
唯一的问题是,该代码将被执行需要驻留在主类中。
我怎样才能获得actionPerformed()方法中的主要类来执行当按钮被点击别处?
解决方案
请您的控制器(“主”类)实现ActionListener接口,然后传递给视图类的引用:
public class View extends JFrame {
public View(final ActionListener listener) {
JButton button = new JButton("click me");
button.addActionListener(listener);
button.setActionCommand("do_stuff");
getContentPane().add(button);
pack();
setVisible(true);
}
}
public class Control implements ActionListener {
public Control() {
new View(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("do_stuff")) {
// respond to button click
}
}
}
它也可以与操作来完成 ,但如果你要一段代码到许多按钮回应说,更为有用。
其他提示
实施匿名内部类作为的ActionListener上的按钮,然后调用主类的方法。这造成更少的依赖关系,并且避免了该标记及开关式编程,实施上的主类ActionListener接口倾向于促进。
在这两种情况下会在你的依赖关系图创建一个循环:主类将了解的按钮,该按钮将需要调用的主类。这可能不是一个好主意,因为这将使它很难撰写的东西以任何其他方式。但是,如果没有进一步的信息很难判断形势或推荐任何具体。
在主类实现ActionListener并添加主类实例作为你的GUI按钮的监听器。
不隶属于 StackOverflow