java - 嵌套类与实现 ActionListener

标签 java swing actionlistener

创建实现 ActionListener 的嵌套类有什么好处或坏处:

public class Foo{
    Foo(){
        something.addActionListener(new ButtonListener());
    }
    //...
    private class ButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            //...
        }
    }
}

与在主类本身中实现 ​​ActionListener 相比:

public class Foo implements ActionListener{
    Foo(){
        something.addActionListener(this);
    }
    //...
    public void actionPerformed(ActionEvent e){
        //...
    }
}

我经常看到这两个例子,只是想知道是否有“最佳实践”。

最佳答案

@Ankur,您仍然可以使用匿名内部类作为您的监听器,并拥有一个独立的独立控制类,因此代码非常易于维护,这是我有点喜欢使用的技术。例如:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class AnonymousInnerEg {
   private static void createAndShowUI() {
      GuiPanel guiPanel = new GuiPanel();
      GuiControl guiControl = new GuiControl();
      guiPanel.setGuiControl(guiControl);

      JFrame frame = new JFrame("AnonymousInnerEg");
      frame.getContentPane().add(guiPanel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

class GuiPanel extends JPanel {
   private GuiControl control;

   public GuiPanel() {
      JButton startButton = new JButton("Start");
      startButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            if (control != null) {
               control.startButtonActionPerformed(e);
            }
         }
      });
      JButton endButton = new JButton("End");
      endButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            if (control != null) {
               control.endButtonActionPerformed(e);
            }
         }
      });

      add(startButton);
      add(endButton);
   }

   public void setGuiControl(GuiControl control) {
      this.control = control;
   }


}

class GuiControl {
   public void startButtonActionPerformed(ActionEvent ae) {
      System.out.println("start button pushed");
   }

   public void endButtonActionPerformed(ActionEvent ae) {
      System.out.println("end button pushed");
   }
}

关于java - 嵌套类与实现 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451010/

相关文章:

java - SwingUtilities InvokeLater-什么被认为是不好的做法?

java - 在哪里可以找到 jdatepicker jar 文件?

java - SwingUtilities.getLocationOnScreen() 的问题;

java - 如何知道我的程序中何时发生了某个操作

java - 如何向已经可见的 jPanel 添加按钮?

java - 如何在 JLabel 上使用按键绑定(bind)?

java - 使用 orderByChild() 获取计数

java - java中不同类中通过静态方法设置和获取静态变量值

java - GATE 将注释 ID 作为特征写入

java - 使用 BufferedInputStream 抛出异常