java - 将通用 ActionListener 添加到许多 JButtons 或 JComponents 或 JTextFields

标签 java swing

[首先我已经阅读了这个答案,但我知道我的答案不同 Add actionListener to a lot of JButton ]

我有一系列 JTextField,当它们的值更新时我需要做一些事情。通常我需要对所有这些执行 myAction(JTextField jt)

现在我使用这段代码来完成它,但我必须为我的每个 JTextField 创建这段代码的实例,我只想做一次。

myJTextField1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //change some value here!
            myAction(myJTextField1);
        }
    });
//repeat for myJTextFields-2-to-9

这是我尝试过的方法,但它不起作用,因为 jt 不可访问。

void addListener(JTextField jt){
    jt.addActionListener(new ActionListener (){
        public void actionPerformed(ActionEvent e) {
            //change some value here!
            myAction(jt);
        }
    });
 }

我也尝试过类似jt.addActionListener(new myListener implements ActionListener (jt){ 但我真的不知道该怎么做。

最佳答案

首先创建一个通用的ActionListener,它从事件中提取发生 Action 的JTextField:

ActionListener listener = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        myAction((JTextField)e.getSource());
    }
}

或更短的 lambda

ActionListener listener = e -> myAction((JTextField)e.getSource());

然后将其注册到您的文本字段中:

myJTextField1.addActionListener(listener);
myJTextField2.addActionListener(listener);
...

更新:

如果您想将每个文本字段与一个字符串参数相关联并将该参数传递给您的 myAction 方法,您可以在名称字段中传输该参数:

myJTextField1.setName("param1");

并将其提取到操作方法中:

    public void actionPerformed(ActionEvent e) {
        JTextField tf = (JTextField)e.getSource();
        myAction(tf, tf.getName());
    }

当然这也可以在 myAction 中完成。

关于java - 将通用 ActionListener 添加到许多 JButtons 或 JComponents 或 JTextFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37185457/

相关文章:

java - 在java awt或swing中,如何安排键盘输入到鼠标所在的位置?

java - 重绘在自定义面板中不起作用

java - 每次程序运行时创建一个新的但不同的对象

java - 使用 Scala 的 poi-ooxml-schemas-3.9.jar 的 Sbt 编译错误

java - 在 Jtable 列中显示处理后的值并使用原始值进行排序?

java - 在 OS X Lion 上的 Java 7 中使用 JTables 对 setValueAt 的虚假调用?

java - 设置 JMenu 边距不起作用

java - 从Java中的字符串中删除元音和数字?

java - 错误 500 : LocalTransaction rolled-back due to setRollbackOnly

java - 签名的 jar 抛出 java.lang.reflect.InvocationTargetException