блокировка JTextField от внешних обновлений при редактировании - PullRequest
1 голос
/ 29 марта 2011

Мой графический интерфейс отображает данные, поступающие с сервера каждые 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 голосов
/ 30 марта 2011

Решение, которое я придумал, состоит в том, чтобы определить, когда текстовое поле редактируется, и не обновлять его.

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(...);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...