2011-12-16 16 views
1

組み合わせキーを検出する方法シフト + JTextFieldに設定しますか? シフト + タブがフォーカストラバーサルキーであるのでJTextFieldでコンビネーションキーを検出しますか?

+1

可能重複[のKeyListenerは、キーの組み合わせを検出するにはどうすればよい(例えば、ALT + 1 + 1)](http://stackoverflow.com/questions/7851505/how-can-a-keylistener-detect- key-combinations-eg-alt-1-1) –

答えて

1

これは、特殊なケースのビットです。あなたはJTextField

component.setFocusTraversalKeysEnabled(false); 

を呼び出すことによって、それを防ぐために必要がありますので、フォーカス・サブシステムは、通常、フォーカストラバーサルキーを消費します。 Shift + タブの組み合わせを検出して自分で処理することができます。

ダウンロードしてどのように動作するか試してみることができるサンプルプログラムについては、How to Write a Key Listenerを参照してください。

+2

+1、forcus traversalをオフにします。 -1、KeyListenerを提案します。 KeyListenerを使用しないでください。 SwingはKey Bindingを使用するように設計されています。 「キーバインディングの使い方」の同じチュートリアルのセクションを読んでください。 – camickr

1

タブシフト + タブは/デフォルトである(唯一KeyBindingはそれを変更することができます)別のJComponentからFocusの移動について、私はあなたに詳細な説明をFocusListenerを見ていると思いますFocusSubsystemは、予告FocusはネイティブOSから来て、デフォルトasynchronousで、ほとんどの時間はinvokeLater()

2

に包まれた彼らの行動/イベントを遅らせることは、あなたが望むものである。この必要ですか?

javax.swing.JTextField textField = new javax.swing.JTextField(); 
textField.setFocusTraversalKeysEnabled(false); 
javax.swing.Action myAction = new javax.swing.AbstractAction() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
    //Insert arbitrary code here 
    } 
}; 
textField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, Event.SHIFT_MASK), "myCode"); 
textField.getActionMap().put("myCode", myAction); 
+0

KeyListenerを使用しないこれは間違った方法です。Swing JComponentsはKeyBindingを使用するように指定されています.KeyBindingsは組み込みのキーショートカットをオーバーライドできます.KeyBindingsは設定したとおりにwokrsのみ、JComponentsにFosusがあるときはKeyBindingsのみ無視するか、あなたはアドバイスのために – mKorbel

+0

を設定しました。 – Supuhstar

+0

キーバインディングを使用するように私の例を変更しました – Supuhstar

関連する問題