Java Simple ActionListener问题

时间:2010-03-09 03:56:29

标签: java user-interface events actionlistener

我在程序中有一个主类,它启动另一个处理所有GUI内容的类。 在GUI中,我有一个按钮,我需要将ActionListener附加到。

唯一的问题是,要执行的代码需要驻留在主类中。

当在其他地方点击按钮时,如何让ActionPerformed()方法在主类中执行?

3 个答案:

答案 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按钮上将主类实例添加为侦听器。