我在JTextField上使用JGoodies Binding,如下所示:
trigger = new Trigger();
PresentationModel<SpectralControlsModel> adapter = new PresentationModel<SpectralControlsModel>(model, trigger);
ValueModel valueModelStartingSampleJTextField = adapter.getBufferedModel("startingSample");
startingSampleJTextField = BasicComponentFactory.createLongField(valueModelStartingSampleJTextField);
setupValueModelListener(valueModelStartingSampleJTextField, startingSampleJTextField);
我在JTextField上有一个keyListener,当按下“enter”键时,它会向模型提交数据。
问题是当我在JTextField中输入一个新数字并按Enter键时,模型会获得旧值,即使我调用了trigger.triggerCommit()。如果我输入一个新数字,然后单击其他内容,将焦点放在JTextField上,然后再次获得焦点,那么新值将按预期在模型中结束。
如果我能够清楚地描述问题,请告诉我,这是非常奇怪的行为,我需要深究它,谢谢。
更新 我转到此Java2s.com JGoodies Example并添加了此代码:
firstNameTextField.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
trigger.triggerCommit();
}
});
当我按下“进入”按钮时按下“输入”按钮时,actionListener会像我点击“提交缓冲区按钮”时那样触发,但在显示值时没有提交任何内容。我很困惑。必须有一种方法可以让JGoodies使用键盘输入。我不应该单击JTextField来获取文本以获得值模型。
答案 0 :(得分:1)
我在JTextField上有一个keyListener,当按下“enter”键时,它会向模型提交数据。
可能与您的问题无关,但您应该使用ActionListener来处理Enter键,而不是KeyListener。
答案 1 :(得分:1)
对这个问题感到抱歉,我没有说清楚。这是答案:
我查看了JGoodies API(应该早点完成)并发现一个意外的静态调用,Bindings.commitImmediately()
如果我在调用trigger.triggerCommit()之前调用此方法,一切都按预期工作:)