[英]Updating multiple JTextFields with a single call using a Listener
使用JButton,我可以创建一个AbstractAction并将其与许多JButtons关联,从而使我能够使用1条命令启用/禁用许多按钮。
我想具有类似的功能,但可以通过一次调用更新许多JTextField的值。 不幸的是,我无法确定什么类型的动作/监听器或使用什么类型。
以下是创建2个JFrame的基本代码示例。 一帧有一个JButton和一个JTextField。 第二帧只有一个JTextField。
无论是单击按钮还是在JTextfield中单击Return,计数器都会递增,并且仅出现在frame1的JTextField中。 尽管在第2帧的JTextField中按Enter,该值仍仅在第1帧更新。
主要目标是通过doData()BUT更新两个帧上的JTextField,以通过某些Action或Listener或其他方式(而不是直接引用JTextField本身)来进行更新。
import java.awt.event.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
public class DetachedUpdate
{
JTextField field1 = new JTextField();
int x = 1;
public static void main(final String args[])
{
DetachedUpdate myApp = new DetachedUpdate();
myApp.field1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("actionPerformed()");
myApp.doData();
}
});
buildFrame1(myApp.field1, myApp);
buildFrame2(myApp.field1, myApp);
}
public void doData()
{
System.out.println("doData()");
field1.setText(new Integer(x++).toString());
}
public static void buildFrame1(JTextField txtField, DetachedUpdate x)
{
JFrame frame = new JFrame("JToolBar Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JToolBar toolbar = new JToolBar();
toolbar.setRollover(true);
JButton button1 = new JButton("Button 1");
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("actionPerformed()");
x.doData();
}
});
toolbar.add(button1);
toolbar.add(txtField);
Container contentPane = frame.getContentPane();
contentPane.add(toolbar, BorderLayout.NORTH);
contentPane.setPreferredSize(new Dimension(10,10));
frame.setSize(500, 500);
frame.setVisible(true);
}
public static void buildFrame2(JTextField txtField, DetachedUpdate x)
{
JTextField newField = new JTextField();
ActionListener[] listeners = txtField.getActionListeners();
for (int i = 0; i < listeners.length; i++)
{
newField.addActionListener(listeners[i]);
}
JFrame frame = new JFrame("JToolBar Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JToolBar toolbar = new JToolBar();
toolbar.setRollover(true);
JButton button1 = new JButton("Button 1");
toolbar.add(newField);
Container contentPane = frame.getContentPane();
contentPane.add(toolbar, BorderLayout.NORTH);
contentPane.setPreferredSize(new Dimension(10,10));
frame.setSize(500, 500);
frame.setVisible(true);
}
}
两个字段都使用actionPerformed
本身,但这不会自动同步字段内容。 查看DocumentListener
并尝试对两者使用相同的DocumentListener。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.