1

正しくセットされたSwingを持っていJComboBoxます。InputVerifier

コンボボックスを使用して整数を設定しています。

フィールドに「cat」と入力してタブを押すと、InputVerifierトリガーされて値が「0」にリセットされます。

「cat」と入力してEnterキーInputVerifierを押すと、から呼び出されることはありませんactionPerformedInputVerifierfromを明示的に呼び出す必要がありactionPerformedますか?

私のJComboBoxタブを検証して入力するのに最適なモデルは何ですか?これは、スイングモデルによって「無料で」私に与えられるべきもののようです。

4

3 に答える 3

4

問題は、「タブを押す」と「エンターを押す」は、JavaSwingで2つの異なることを意味することです。しかし、これら2つのアクションは、あなた、私、そしてユーザーにとって同じことを意味します。

Swingには、「ユーザーがデータの入力を完了したとき」を検出する単一のメカニズムはありません。代わりに、Swingは、「このフィールドはキーボードのフォーカスを失う」および「ユーザーがフィールド内でEnterキーを押す」というメカニズムに焦点を当てています。

意味的には、これら2つのアクションは、ユーザーの観点からは同じことを意味します。「完了しました。これが私の入力です。」しかし、私が言えることから、Swingはそのユーザーの意図を検出する方法を提供できません。これはGUIのフォームの最も基本的な機能のように思われるので、このような機能がないことに驚いています。必要なのは「dataEntered」イベントですが、持っていません。

回避策があります…</p>

同様のコンテキスト(JComboBoxではなくJTextField)で、Sun / Oracle Javaチュートリアルは、次のようなクラスが作成されるInputVerificationDemoの例を提供します。

  • InputVerifierを拡張します(フォーカスが失われそうな場所でのタブ移動/クリックを処理するため)
  • ActionListenerを実装します(フィールドを離れずにEnterキーを押すことを処理するため)

この回避策の良いところは、処理コードをすべて1か所で見つけることができることです。欠点は、まだ面倒なことです。

  • 別のクラスを作成します。
  • そのクラスをインスタンス化します。
  • そのインスタンスをウィジェットのsetInputVerifierメソッドaddActionListenerメソッド(JTextFieldなど)の両方に渡します。
于 2011-08-22T22:46:36.970 に答える
1

これは、次の予想される動作ですInputVerifier。キーはTABフォーカスを変更しようとしますが、ENTERキーは変更しません。ENTERチュートリアル「キーバインドの使用方法」で説明されているように、キーを別のアクションにバインドできます。また、便利なユーティリティアプリケーションが含まれている有益な記事KeyBindingsを検討してください。

于 2010-06-29T18:15:03.527 に答える
1

編集可能なコンボボックスを使用する場合、フォーカスはコンボボックスのエディターとして使用されるJTextFieldにあります。このテキストフィールドにActionListenerを追加できます。

ActionListenerで、transferFocus()メソッドを呼び出してみることができます。これは、テキストフィールドをタブで移動するのと同じです。それが機能しない場合、actionListenerはInputVerifierと同じ編集コードを呼び出す必要があります。

于 2010-06-29T19:55:29.420 に答える