2017-01-07 8 views
1

に、arrow keyのリスナーをフォーカスをオフにすることはできますか?私は、領域内のスペースよりも多くのテキストがあるときに、それらとスクロールペインを動かすことに大いに助けています。私はこれを避けようとしています。JavaFXテキストリスナー

ありがとうございました。

答えて

2

イベントフィルタを使用できます。フィルタはイベント処理のイベント取得フェーズ(1番目はシーングラフの下)でイベントを受信し、ハンドラはイベントバブリングフェーズ(2番目はシーングラフの上)でトリガされます。このスニペットを見て:

TextArea textArea = new TextArea(); 
textArea.addEventFilter(KeyEvent.ANY, event -> { 
    KeyCode code = event.getCode(); 
    boolean isArrowKey = code == KeyCode.UP || code == KeyCode.RIGHT 
      || code == KeyCode.DOWN || code == KeyCode.LEFT; 
    if (isArrowKey) { 
     event.consume(); 
    } 
}); 

consume()方法は、イベントのさらなる伝播を停止します。その結果、(キーイベント)リスナーはトリガーされません。しかし、これによって矢印キーをナビゲートする機能も無効になります。本当に必要なのはそれですか?

EDIT:your commentに関してでthis answer状態:

スクロールバーを制御するための動作は、内部的に(Javaの8に公共のJavaFX APIの一部ではない)TextAreaSkinでコード化されます。 TextAreaSkinをコピーまたはサブクラス化してその動作をカスタマイズし、次にattach your customized skin to your nodeをカスタマイズすることができます。これは実際には、あなたが望む方法で内部コントロールの動作をカスタマイズする "適切な"方法です。

+0

正確ではありません。私は矢印で 'TextArea'のスクロールペインを動かすが、私自身のonKeyPressedイベントを持っていたいというこれらの特定のリスナーを無効にしたいと思います。今私はJavaFX Apiから+自分で実装したアクションを持っています。ポイントは、2番目のポイントをオフにすることです。私はそれが今より明確であることを願っています。 – Saris

+0

@Saris私の答えを編集していただきありがとうございます。 – beatngu13

+2

'if(textArea.isFocused())'が重複しています:フォーカスがない場合、テキスト領域はキーイベントを起動しません。 @Sarisこれがなぜあなたが望むことをしないのかは分かりません。あなた自身の機能を 'if(isArrowKey)'ブロックに追加するだけです。 –