Можно ли принудительно ввести значение из JTextField в ValueModel (JGoodies) - PullRequest
2 голосов
/ 18 января 2011

У меня есть этот код:

this.trigger = new Trigger();
this.presentationModel = new PresentationModel(this.personBean, this.trigger);
final ValueModel firstNameAdapter = presentationModel.getBufferedModel("firstName");
final JTextField firstNameTextField = BasicComponentFactory.createTextField(firstNameAdapter);

и

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

Поэтому, когда я нажимаю кнопку ввода на JTextField, я ожидаю значение в моем классе ValueModelбыть таким же, как значение в моем JTextField.Этого не произойдет, если я не нажму за пределами JTextField, затем вернусь за JTextField, а затем нажму Enter.Если я просто наберу текст и нажму клавишу ввода, ValueModel не получит обновленное значение.Я застрял в этой проблеме, кто-нибудь может помочь?

Кстати, я использовал эту ссылку для выяснения JGoodies в первую очередь: Учебник JGoodies

Ответы [ 3 ]

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

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

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

0 голосов
/ 02 февраля 2011

Создайте текстовое поле, которое фиксируется на каждом набранном ключе вместо того, чтобы потерять фокус:

BasicComponentFactory.createTextField(firstNameAdapter, false);

Кроме того, вам следует подумать о том, чтобы в вашей программе не использовались буферизованные модели.Я нахожу, что они делают вещи более сложными и хитрыми, и мне кажется, что Карстен Ленцш рекомендовал не использовать их также в списке рассылки.

Самый полезный способ для меня изучить JGoodies - это посмотреть учебниккод для библиотек привязки и проверки JGoodies.

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

Надеюсь, я правильно понимаю ваш вопрос.

Вам нужно получить текст в текстовом поле и установить его в ValueModel.

firstNameTextField.addActionListener(new ActionListener()      
{         
    @Override         
    public void actionPerformed(ActionEvent e)          
    {
       //this get the text from the text field
       String firstName = firstNameTextField.getText();

       //now write your code to set the firstname into the ValueModel


       trigger.triggerCommit();
    }     
 }); 
...