可以将JTextField中的值强制转换为ValueModel(JGoodies)

时间:2011-01-18 17:23:42

标签: java binding model jgoodies

我有这段代码:

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不会获得更新的值。我坚持这个问题,任何人都可以帮忙吗?

BTW,我首先使用此链接来计算JGoodies:JGoodies Tutorial

3 个答案:

答案 0 :(得分: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();
    }     
 }); 

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

BasicComponentFactory.createTextField(firstNameAdapter, false);

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

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