[首先我已经阅读了这个答案,但我知道我的答案不同 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/