我的GUI每隔500毫秒显示来自后端的数据。在编辑字段时,我遇到了竞争条件。调用Action侦听器时,后端的值会覆盖用户手动输入的任何文本字段。
有没有办法锁定字段或使用信号量或从其他地方检索新值?
感谢。
JTextField tf = new JTextField();
tf.setName("reg_r"+i);
tf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JTextField tf = (JTextField)e.getSource();
//prints OLD value!
System.err.println(tf.getText());
}
});
答案 0 :(得分:0)
我想出的解决方案是检测文本字段何时被编辑而不是更新它。
JTextField tf = (JTextField) FrameUtils
.getComponentById(
instance.getContentPane(), "reg_r"
+ i);
Component c = (Component) getFocusOwner();
if (c == null || !tf.getName().equals(c.getName())) {
// JTextField is not focused/being edited, proceed with update
tf.setText(...);
}