1

我在 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 示例并添加了以下代码:

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

当我在调试打开的情况下点击 enter 按钮时,actionListener 会像我点击提交缓冲区按钮一样触发,但是当我显示值时没有提交任何内容。我对此感到非常困惑。必须有一种方法可以让 JGoodies 使用键盘输入。我不必从 JTextField 中单击以使文本进入值模型。

4

2 回答 2

1

抱歉这个问题,我解释的不是很清楚。这是答案:

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

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

于 2011-01-18T19:13:15.070 回答
1

我在 JTextField 上有一个 keyListener,它在按下“enter”键时将数据提交给模型。

可能与您的问题无关,但您应该使用 ActionListener 来处理 Enter 键,而不是 KeyListener。

于 2011-01-17T20:31:27.747 回答