【发布时间】:2011-06-27 12:10:59
【问题描述】:
当 TXTFLD1 的值发生变化时,我想将 jTextField - TXTFLD1 的值复制到另一个 jTextField -TXTFLD2。
我选择propertychangelistener,因为我无法检测到 TXTFLD1 的值何时更改,因为它被一些我现在无法修改的外部代码更改。
测试代码如下:
public class TxtFldSync extends JFrame {
private JButton BTN1 = null;
private JTextField TXTFLD1 = null;
private JTextField TXTFLD2 = null;
public static void main(String[] args) {
TxtFldSync thisClass = new TxtFldSync();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
public TxtFldSync() {
super();
this.setSize(300, 200);
BTN1 = new JButton();
BTN1.setBounds(new Rectangle(178, 38, 67, 17));
TXTFLD1 = new JTextField();
TXTFLD1.setBounds(new Rectangle(32, 42, 83, 20));
TXTFLD2 = new JTextField();
TXTFLD2.setBounds(new Rectangle(30, 78, 83, 20));
//listeners
TXTFLD1.addPropertyChangeListener("value", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent arg0) {
TXTFLD2.setText(TXTFLD1.getText()+"set by change listener");
//this doesnot work why ?
}
});
BTN1.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
TXTFLD1.setText("Action Performed");
//i what to set same value to TXTFLD2 using property change listener
}
});
this.setContentPane(new Container());
this.getContentPane().add(BTN1);
this.getContentPane().add(TXTFLD1);
this.getContentPane().add(TXTFLD2);
}
}
为什么属性更改侦听器不起作用。 这个问题的其他替代解决方案是什么?
【问题讨论】:
-
它们可以共享相同的底层 Document 对象吗?然后将自动镜像更改。