我在程序中有一个主类,它启动另一个处理所有GUI内容的类。 在GUI中,我有一个按钮,我需要将ActionListener附加到。
唯一的问题是,要执行的代码需要驻留在主类中。
当在其他地方点击按钮时,如何让ActionPerformed()方法在主类中执行?
答案 0 :(得分:2)
使您的控制器(“main”类)实现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
}
}
}
也可以使用Actions来完成,但是如果您希望一段代码响应许多按钮,这会更有用。
答案 1 :(得分:2)
在按钮上实现一个匿名内部类作为ActionListener,然后在主类上调用该方法。这样可以减少依赖关系并避免使用标签和切换样式编程,在主类上实现ActionListener接口往往会促进。
在任何一种情况下,它都会在依赖关系图中创建一个循环:主类将知道按钮,按钮将需要调用主类。这可能不是一个好主意,因为它会使以任何其他方式组合事物变得困难。但如果没有进一步的信息,很难判断情况或推荐具体的东西。
答案 2 :(得分:0)
在主类中实现ActionListener,并在GUI按钮上将主类实例添加为侦听器。