2016-08-01 13 views
0

のためにキーバインド私は以前のKeyListenerを使用して解決してきた私の本から問題を書き換えることでキーバインドを習得しようとしてきました。私はキーバインドを使用して解決するために苦労してる問題がタイプされていて、パネルに表示するメッセージを記録するために私を必要とします。Javaのスイング:KEY_TYPEDイベント

それのKeyListenerを使用して解決した方法は、ユニコードがkeyTypedに()メソッドを使用しkeyPressedと改質剤/非Unicodeのキーを読み取ると文字を記録することによって、単純です。 KeyEvent.VK_ENTERはのKeyEventからのキーコードと一致する場合、それはパネル上の文字列が表示されます。

~~~~~~~~

私はそれがキーバインドと同様の方法で解決することができると考えました。 KeyEventドキュメントでは、文字が入力されるたびにKeyEvent.KEY_TYPEDが起動されることを示しています。私は、対応するUnicodeを持つすべての文字が、KeyListenerでどのように動作するかのように型付けされていることを意味するものと仮定しました。

その後、KeyBindsに関するOracleのチュートリアルでは、actionPerformed()が呼び出されたときにKeyEventが消費されるため、文字を取得する方法がわかりません。

これは私がキーバインドを使用してのStringBuilderに入力されたキーを記録するために私を可能にするだろうと思ったのコードです:

getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.KEY_TYPED, 0), "recordTypedKey"); 
getActionMap().put("recordTypedKey", addCharToString); 

は、追加のほかのKeyListenerのkeyTypedに()メソッドを呼び出します文字を取得するためにそこの方法ですそれを記録するために別々のアクションイベントを使用していますか?

+0

キーバインディングをマップするために使用されていますアクションに対する特定のキーストロークすべてのキーストロークを聞くためにキーバインディングを使用しません。 '私はキーバインドを使用して解決するために苦労してる問題は多分あなたは' DocumentListener'をtyped'-を使用する必要がありますされていたメッセージを記録するために私を必要とします。このリスナーは、任意のテキストコンポーネントの 'Document'に追加できます。 – camickr

答えて

2

それらの一つ一つにキーを追加し、それらを記録するために、別のアクションイベントを使用してほかのKeyListenerのkeyTypedに()メソッドを呼び出します文字を取得する方法はありますか?

私はあなたのキーバインドは、個々のキーベースで動作するように、のKeyListenerに似て動作するのInputMapに渡すことができるグローバルKeyStrokeがあると信じていません。ただし、単一のアクションを作成して処理したいchar値をループでそれにキーをバインドすることができます - あなたはgetActionCommandを経由して、キーの値を得ることができたActionListenerの実装に。 AZに対処するたとえば:

AbstractAction action = new AbstractAction(){ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println(e.getActionCommand()); 
    } 

}; 
//loop over the ascii char values 
for (char a = 'A'; a <= 'Z'; a++){ 
    panel.getInputMap().put(KeyStroke.getKeyStroke(Character.toString(a)), "recordTypedKey"); 
} 
panel.getActionMap().put("recordTypedKey", action); 

必要な場合は、修飾子を追加することができます...シフトキー(例えば大文字)に対処するため、たとえば、

panel.getInputMap().put(KeyStroke.getKeyStroke("shift " + Character.toString(a)), "recordTypedKey"); 
関連する問題