我有一个启动另一类处理所有的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按钮的监听器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top