使用JButtons,我可以创建一个AbstractAction并将其与许多JButtons相关联,这允许我使用1个命令启用/禁用许多按钮。
我希望具有相似的能力,但只需一次调用即可更新多个JTextField的值。不幸的是,我无法确定哪种类型的动作/听众或其他什么可以使用。
以下是创建2个JFrame的基本代码示例。一帧有一个JButton和一个JTextField。第二帧只有一个JTextField。
无论是单击按钮还是在JTextfield中命中Return,计数器都会递增并仅出现在frame1上的JTextField中。虽然在第2帧上点击JTextField进入,但该值仍然只在第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);
}
}
答案 0 :(得分:0)
actionPerformed
本身用于两个字段,但这不会自动同步字段内容。查看DocumentListener
并尝试对两者使用相同的DocumentListener。