JGoodies Binding Вопрос об ошибке в буферизованных моделях и вводе с клавиатуры - PullRequest
1 голос
/ 17 января 2011

Я использую JGoodies Binding на JTextField следующим образом:

    trigger = new Trigger();

    PresentationModel<SpectralControlsModel> adapter = new PresentationModel<SpectralControlsModel>(model, trigger);

    ValueModel valueModelStartingSampleJTextField = adapter.getBufferedModel("startingSample");
    startingSampleJTextField = BasicComponentFactory.createLongField(valueModelStartingSampleJTextField);
    setupValueModelListener(valueModelStartingSampleJTextField, startingSampleJTextField);

У меня есть keyListener на JTextField, который фиксирует данные в модели при нажатии клавиши «ввод».

Проблема в том, что когда я ввожу новый номер в JTextField и нажимаю enter, модель получает старое значение, даже если я вызываю trigger.triggerCommit (). Если я введу новое число, а затем нажму на что-то другое, потерю фокуса на JTextField, а затем снова получу фокус, тогда новое значение окажется в модели, как ожидалось.

Дайте мне знать, если я достаточно четко описал проблему, это очень странное поведение, и мне нужно разобраться с этим, спасибо.

UPDATE Я пошел к этому Java2s.com JGoodies Example и добавил этот код:

firstNameTextField.addActionListener(new ActionListener() 
    {
        @Override
        public void actionPerformed(ActionEvent e) 
        {
            trigger.triggerCommit();
        }
    });

Когда я нажимаю кнопку ввода с включенной функцией отладки, actionListener срабатывает точно так же, как если бы я нажимал кнопку Commit Buffer Button, но при выводе значений ничего не фиксируется. Я очень озадачен этим. Должен быть способ заставить JGoodies работать с клавиатурным вводом. Мне не нужно было щелкать текстовое поле JTextField, чтобы перейти к модели значений.

Ответы [ 2 ]

1 голос
/ 18 января 2011

Извините за этот вопрос, я не очень четко объяснил. Вот ответ, однако:

Я просмотрел JGoodies API (должен был сделать это раньше) и обнаружил неожиданный статический вызов Bindings.commitImmediately ()

Если я вызову этот метод перед моим вызовом trigger.triggerCommit (), все будет работать как положено:)

1 голос
/ 17 января 2011

У меня есть keyListener на JTextField, который фиксирует данные в модели, когда нажата клавиша "ввод".

Возможно, это не связано с вашей проблемой, но вы должны использовать ActionListener для обработки клавиши Enter, а не KeyListener.

...