将通用ActionListener添加到许多JButton或JComponents或JTextFields

时间:2016-05-12 11:23:54

标签: 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){这样的东西,但我真的不知道怎么回事。

3 个答案:

答案 0 :(得分:3)

首先创建一个通用ActionListener,从事件中提取发生操作的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中完成。

答案 1 :(得分:2)

仅供参考:即使@wero的回答非常好,您也可以更改方法以使其有效。

VisibleForTesting        @FindBy(css="li:nthchild(2).NoBullet.jmsbullet>h3>a[href^='javascript:ShowSelectedAddInScreen']")

private WebElement HolidayLink;

答案 2 :(得分:1)

上课implements ActionListener

public class myClass extends abcd implements ActionListener {

    public void someMethod(){
        myJTextField1.addActionListener(this);
        myJTextField2.addActionListener(this);
        myJTextField3.addActionListener(this);//add more ...
    }

    @override
    public void actionPerformed(ActionEvent event) {
        JTextField target = (JTextField)event.getSource();
        myAction(target);
    }
}