2013-05-14 10 views

答えて

57

私は言及SCOTTBのような匿名の内部クラスとしてChangeListenerを指定する例を参照すると便利かもしれないと思った:

は、ここで私は私のフォーカスリスナーのために書いたプライベートクラスです。

TextField yourTextField = new TextField(); 
yourTextField.focusedProperty().addListener(new ChangeListener<Boolean>() 
{ 
    @Override 
    public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) 
    { 
     if (newPropertyValue) 
     { 
      System.out.println("Textfield on focus"); 
     } 
     else 
     { 
      System.out.println("Textfield out focus"); 
     } 
    } 
}); 

この回答は役に立ちましたか?

+3

フォーカスが実際に変更される前または後に実行されますか? –

+0

'yourTextField'がフォーカスを持っている間にアプリケーションが閉じられていても' changed'が呼び出されることは注目に値します。これは私にとって非常に望ましくなく、 'primaryStage.setOnCloseRequest(event - > { removeListeners(); })の行に沿って何かをして、 – Jake

8

を印刷する必要がありますしたいTextFieldための「フォーカスオン」イベントに例えば

ChangeListenerを監視したいTextFieldのFocusPropertyに設定します。

JavaFXでは、プロパティがJavaFX Beanの最小定義を満たしている限り、オブジェクトが所有するJavaFXプロパティに通知イベント(変更または無効化リスナー)を添付できます。

あなたのイベントハンドラは、このようなボタン設定をキャンセル変更またはデフォルトとして他のことをやっている場合は、この記事を参照してください:ここでJavaFX 2 -- Setting the defaultButton property: mutually exclusive?

は、テキストボックスに変更リスナーを取り付けるためのいくつかのコードです:

txtDx.focusedProperty().addListener(m_txtDxListener); 

Listenerオブジェクトはインスタンスフィールドに格納されているため、addListener()とremoveListener()の両方で使用できます。短命のTextFieldの場合、匿名の内部クラスを使用してリスナーオブジェクトを指定できます。

private class FocusPropertyChangeListener implements ChangeListener<Boolean> { 

    FocusPropertyChangeListener() { System.out.println("New FPCL instance"); } 

    @Override 
    public void changed(ObservableValue<? extends Boolean> ov, 
     Boolean oldb, Boolean newb) { 
     System.out.println("Focus change triggered"); 

     if (ancEncEditor.isVisible() && !ancEncEditor.isDisabled()) { 
      boolean b = (newb != null && newb.booleanValue() == true); 
      System.out.println("txtDx focus change event triggered: DxAdd = " + b); 

      if (b) { btnDxAdd.setDefaultButton(true); } 
      else { btnWindowCommit.setDefaultButton(true); } 
      btnWindowCommit.setCancelButton(true); 
      btnDxAdd.setDefaultButton(b); 
     } 
    } 
} 
+0

SCOTTB ....私はすることができませんわかる。小さな例を教えてください。 –

+2

java baba、TextFieldのfocusedProperty()に単純な変更リスナーを追加して、どの種類のフォーカス状態(真/偽)であるかを確認してください。 –

4

focusedPropertyNodeにはChangeListenerを添付できます。

ブレンダンから答えを拡張する:、三項演算子と組み合わせラムダ式(これは、Java 8に付属しているとして)JavaFX8から、それは本当にコンパクトに作ることができます。

textField.focusedProperty().addListener((obs, oldVal, newVal) -> 
    System.out.println(newVal ? "Focused" : "Unfocused")); 
関連する問題