2

我有这个代码:

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

因此,当我按下 上的 enter 按钮时JTextField,我希望我的ValueModel类中的值与我的JTextField. JTextField除非我单击外部,然后返回内部JTextField,然后按 Enter 键,否则不会发生这种情况。如果我只是输入文本并按 Enter,ValueModel则不会获得更新的值。我被这个问题困住了,有人可以帮忙吗?

顺便说一句,我首先使用此链接来弄清楚 JGoodies:JGoodies 教程

4

3 回答 3

0

我查看了 JGoodies API(应该早点完成),发现了一个意外的静态调用,Bindings.commitImmediately()

如果我在调用 trigger.triggerCommit() 之前调用此方法,一切都会按预期工作:)

于 2011-01-18T19:12:24.053 回答
0

我希望我能正确理解你的问题。

您需要获取文本字段中的文本并将其设置在 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();
    }     
 }); 
于 2011-01-18T17:39:20.940 回答
0

创建一个文本字段,在每个键入的键上提交,而不是在失去焦点时提交:

BasicComponentFactory.createTextField(firstNameAdapter, false);

此外,您应该考虑将程序架构为不使用缓冲模型。我发现它们使事情变得更加复杂和棘手,并且认为我看到 Karsten Lentzsch 建议不要在邮件列表中使用它们。

对我来说学习 JGoodies 最有用的方法是查看 JGoodies 绑定和验证库的教程代码。

于 2011-02-02T20:51:39.647 回答