1

私は次のようにJTextFieldでJGoodiesBindingを使用しています。

    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.comJGoodiesの例に行き、次のコードを追加しました。

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

degbuggingをオンにしてEnterボタンを押すと、Commit Buffer Buttonを押した場合と同じようにactionListenerが起動しますが、値を表示しても何もコミットされません。私はこれに非常に戸惑っています。JGoodiesをキーボード入力で動作させる方法が必要です。値モデルに到達するために、テキストのJTextFieldをクリックする必要はありません。

4

2 に答える 2

1

JTextFieldにkeyListenerがあり、「Enter」キーが押されたときにモデルにデータをコミットします。

おそらく問題とは関係ありませんが、KeyListenerではなく、ActionListenerを使用してEnterキーを処理する必要があります。

于 2011-01-17T20:31:27.747 に答える
1

この質問について申し訳ありませんが、私はそれをあまり明確に説明しませんでした。ただし、答えは次のとおりです。

JGoodies APIを調べたところ(これはもっと早く実行する必要がありました)、予期しない静的呼び出しBindings.commitImmediately()が見つかりました。

trigger.triggerCommit()を呼び出す前にこのメソッドを呼び出すと、すべてが期待どおりに機能します:)

于 2011-01-18T19:13:15.070 に答える