java - 添加一个 ActionListener 可以很短吗?我可以向 actionPerformed 添加参数吗?

标签 java awt actionlistener

我有一个大表格,每个单元格中都有一个按钮。这些按钮非常相似,功能几乎相同。如果我以这种方式为每个按钮添加一个 Action 监听器:

tmp.addActionListener(new ActionListener(){
   @Override
   public void actionPerformed(ActionEvent evt) {
      proposition = proposition + action;
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            updatePropositionPanel();
         }
      });
   }
});

实际上,每个 Action 监听器与所有其他监听器的区别在于 action 的值。 propositionupdatePropositionPanel 是类的字段和方法。

  1. 首先,我认为如果不使用内部类,我可以缩短它。所以,我决定编写一个新的 ActionListener 类。但后来我意识到,在这种情况下,“命题”对于此类的实例是不可见的。

  2. 然后我决定将 actionPerformed 方法添加到当前类并执行此操作:addActionListener(this)。但是我意识到我不知道如何为 actionPerformed 方法提供参数。

那么,它是如何工作的。我可以用简短而优雅的方式添加 Action 监听器吗?

已添加:

我喜欢使用可以接受一些参数的构造函数和 actioPerformed 方法编写内部类的想法,该方法可以使用构造函数中给定的参数。我开始这样做,然后意识到它会与其他内部匿名类(在上面给定的代码中使用)产生冲突。所以,我想我会创建另一个类(不是内部类)。

最佳答案

您可以创建自己的类并将数据传递给构造函数。例如

public class MyActionListener
{
    private int proposition;
    private MyOtherClass moc;

    public MyActionListener(int proposition, MyOtherClass moc) {
        this.proposition = proposition;
        this.moc = moc;
    }

    public void actionPerformed(ActionEvent evt) {
        proposition += moc.action;
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                moc.updatePropositionPanel();
            }
        });
    }
}

然后您可以正常添加它,将您喜欢的任何参数传递给构造函数:

tmp.addActionListener( new MyActionListener(proposition, this) );

关于java - 添加一个 ActionListener 可以很短吗?我可以向 actionPerformed 添加参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515552/

相关文章:

java - 在类中声明方法的首选方式

java - 当组件失效或重绘被触发时收到通知

java - 我该如何运行我的 GUI?或者更准确地说,我在 main 中放了什么?

java - 从actionPerformed和actionListener Java返回字符串

java - 无法使按键监听器工作

java - 在 java 中向 TableModel 添加 double 值

java - 在无操作的情况下返回 boolean 值/值而不是 null 是一个好习惯吗?

java - 行中的整数用逗号分隔?

java - 从数组执行的操作

java - 是否可以使用 Java (Swing) 锁定 Windows 操作系统桌面?