Java简单ActionListener问题

Java简单ActionListener问题,java,user-interface,events,actionlistener,Java,User Interface,Events,Actionlistener,我在一个程序中有一个主类,它启动另一个类来处理所有GUI内容。 在GUI中,我有一个需要附加ActionListener的按钮 唯一的问题是,要执行的代码需要驻留在主类中 当在其他地方单击按钮时,如何使ActionPerformed()方法在主类中执行?在主类中实现ActionListener,并将主类实例添加为GUI按钮上的侦听器。使控制器(“主”类)实现ActionListener界面,然后传递对视图类的引用: public class View extends JFrame { pub

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

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


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

在主类中实现ActionListener,并将主类实例添加为GUI按钮上的侦听器。

使控制器(“主”类)实现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接口往往会促进的标记和开关式编程


无论哪种情况,它都会在依赖关系图中创建一个循环:主类将知道按钮,按钮将需要调用主类。这可能不是一个好主意,因为它将使以任何其他方式编写内容变得困难。但是如果没有进一步的信息,就很难判断情况或推荐任何具体的东西。

实例在主类中采用什么形式?它是它自己的类吗?现在唯一的问题似乎是我正在传递“控制”类。但是,它是包含我的主方法的类,因此它来自静态上下文,而“视图”类不是。知道如何补救吗?最简单的解决方案是从main方法实例化控件类。在我的示例中,这将是一个只有一行的主方法:new Control();我已经在main方法中拥有了程序的大部分逻辑。你是说我需要重组整个计划来适应这个?这一点的全部目的是在主类中获取ActionPerformed代码。有更简单的方法吗?我让它工作了,我把控制类和主类放在同一个文件中,在主类之外,主类启动GUI,如果需要,我可以让主类访问按钮。ActionPerformed代码需要在主类中。我只是不知道该去哪里