0

JFrame でデフォルトのボタン アクションを設定しましたが、JTable にフォーカスしているときに実行されません。

フォームがデフォルトのボタンを実行できるように、JTable が Enter キーを無視するようにするにはどうすればよいですか?

編集: もう少し情報: 私の JFrame の内部は動的です。状況に応じてさまざまなコンポーネントを持つことができます: 挿入ボタンと更新ボタンがある場合もあれば、選択ボタンがある場合もあります。ステータスに応じて、さまざまなボタンをデフォルト ボタンとして選択できます。JTable は、さまざまなフレームで使用される一般的なコンポーネントです。ボタンがあるかどうかさえわかりません。この行の 1 つが選択されているだけです。すべてのピース (jtable、ボタンなど) がまとめられ、デフォルトのボタンが定義されています。JTable の列が他の列に変更されるのではなく、Enter キーが押されたときにトリガーされるようにします。

4

2 に答える 2

0

これはテーブルだけではないことを覚えておいてください。テーブル内で編集している場合、エディターはテーブルではなくキーストアをリッスンするものになります。そのため、単なるテーブルよりも大きな問題です。 デフォルトのキーバインディングについて読む

于 2016-03-18T17:14:14.167 に答える
0
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                                   .put(KeyStroke.getKeyStroke("ENTER"), "none");

このコード行を 2 つのステップに分割しましょう。

ステップ1:

table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

すべての JComponent にはいくつかの がありInputMapsます。AnInputMapは基本的KeyStrokesにアクションにマッピングする方法です。

このメソッドは、 、 、およびの 3 つの値のいずれかでgetInputMap()ある引数 を取ります。これらはクラスで宣言された定数であり、コンポーネントが取り得るさまざまな状態に対応しています。Aにはfor each 状態があります。したがって、フォーカスされているコンポーネントと、フォーカスされていないがウィンドウ内にある場合とでは違いがあります。conditionWHEN_IN_FOCUSED_WINDOWWHEN_FOCUSEDWHEN_ANCESTOR_OF_FOCUSED_COMPONENTJComponentJComponentInputMapInputMap

--引数なしでの呼び出しgetInputMap()は、 の便利なメソッドであることに注意してくださいgetInputMap(WHEN_FOCUSED)--

ステップ2:

.put(KeyStroke.getKeyStroke("ENTER"), "none");

権利ができたInputMapので、何かを入れたいと思いますよね!? では、何を入れますか?これはマップなので、キーが必要です。

キーは ですInputMap。この場合、 を呼び出して ENTER キーを指定しています。KeyStrokeKeyStroke.getKeyStroke("ENTER")

は、のString名前を与えるa ですAction

InputMapは通常、 と組み合わせて使用​​されますActionMap。のInputMapキーですActionMapを指定InputMapしましたが、 には呼び出されたものが含まれていないため、何も起こりません。 "none"Action"none"ActionMap

つまり、全体として、ENTER キーが押されたときにJTableもしないように に指示しました。

キー バインディングの詳細については、こちらを参照してください。

これが役立つことを願っています:)

于 2016-03-18T17:06:33.753 に答える