2016-12-07 13 views
1

私は、ユーザーがボタンを定義できるようにするプログラムを作成しています。 独自のカスタムキーボードを作成します。グローバルキーリスナーを複数のボタンにアタッチする

このキーボードは、グローバルなカスタムホットキーにも反応する必要があります。

ここに問題があります: グローバルにするには、それらをシーンに添付しますが、すべての新しく設定されたホットキーが前のホットキーを上書きします。すべてのホットキーを追跡するのArrayListを作成し、その上毎回のKeyListenerの反復を持っている頭に浮かぶ

 btn.getScene().setOnKeyPressed((KeyEvent e) -> { 
      if (e.getText().equals(hotkey)) { 
       btn.arm(); 
       btn.fire(); 
      } 
     }); 
     btn.getScene().setOnKeyReleased((KeyEvent e) -> { 
      if (e.getText().equals(hotkey)) { 
       btn.disarm(); 
      } 
     }); 

即時ソリューション、および関連付けボタン付きのArrayListの別のArrayList: は、いくつかのコードを持っています。

もっとエレガントで直接的な方法はありますか?

+0

[JavaFX 2.2ニーモニックを使用](http://stackoverflow.com/questions/12710468/using-javafx-2-2-mnemonic)これはアクセラレータについての話です。わずかな違いは、アクセラレータで使用されているタイプキーではなく、プレス/リリースイベントを追跡していることです。 – jewelsea

+0

@ jewelsea私はそれを見つけましたが、もっと長いノートのためにユーザーがキーを押し続けることができるようにします – Anarc

答えて

2

2つのアレイリストを使用してホットキーと関連するボタンを追跡すると、ホットキーとボタンを関連付ける方法を実装する必要がある複雑なソリューションにつながります。

これに基づいて、マップを使用して問題を解決するように思えます。関連するボタンに割り当てられた特定のホットキーを持つキー値のペア。

は、すべてのメソッドのために地図上のJavaドキュメントをチェックアウト:

https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

ただ、最もニーズに合うどの実装を選択します。

+0

これはおそらく 'Map'の実装の選択です:https://docs.oracle.com/javase /8/docs/api/java/util/EnumMap.html、KeyCodeをキーとして使用します。 – fabian

関連する問題