2011-08-14 7 views
0

キープレスをJTextFieldからコンテナのKeyListener実装に伝播する方法はありますか?フォーカスされたコンポーネントとそのコンテナの両方で「Tab」キーを押すこと

したがって、キー入力は、テキストフィールドとJPanelの両方によって実行されます。現在、テキストフィールドはキープレスを消費しているため、その下のJPanelには存在しません。

+0

特に、「Tab」キー押下をキャプチャしようとすると、 – cholland

+1

タブはJava Swingアプリケーションで特別な意味を持ち、通常[フォーカスサブシステム](http://download.oracle.com/javase/tutorial/uiswing/ misc/focus.html)とその[FocusTraversalPolicy](http://download.oracle.com/javase/6/docs/api/java/awt/FocusTraversalPolicy.html) –

答えて

2

スイングでは、タブキーを使用して、あるコンポーネントから別のコンポーネントにフォーカスを変更します。記事Validating Inputは、InputVerifierについて議論しています。

1

質問はなぜこれをしたいですか?あなたの試行された解決策に反対するあなたの実際の要件は何ですか?イベントを2つのコンポーネントで処理することは、一般的には良い考えではありません。

一般に、KeyListenersは使用しないでください。スイングはKey Bindingsを使用するように設計されています。ただし、前述のようにフォーカスサブシステムがタブキーを処理するため、この場合は役に立ちません。

これが唯一の問題解決方法であれば、KeyEventPostProcessorを使用してKeyEventを受信できると思います。詳細は、Global Event Listenersを参照してください。

+0

さまざまなスイング入力を含むクラスを作成しましたコンポーネント(JTextFields、JComboBox、JLabelなど)はすべてJPanel内で従来のツールバーの高さを使用しています。バーに追加されたウィジェットが多すぎると、一部のコンポーネントが画面に表示されなくなります。ユーザーはTabキーを使用してコンポーネントからコンポーネントへジャンプするので、基になるJPanelでTabキーを押したかったので、画面からコンポーネントに「Tab」しようとすると、すべてのコンポーネントの「Shift」がトリガーされます。パネルを再レイアウトし、隠されたコンポーネントを表示してフォーカスを合わせます。 – cholland