在编辑时从外部更新锁定JTextField

时间:2011-03-29 19:15:21

标签: java swing

我的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());

            }
        });

1 个答案:

答案 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(...);
            }