2016-11-14 4 views
0

Gibt es eine Möglichkeit, den Fokus auf textField in JavaFX zu halten? Ich mache eine Überprüfung auf TextField mit Listener.Wie deaktivieren Sie den Fokus von textField in JavaFX

textField.textProperty().addListener(
     new ChangeListener<String>() { 
     @Override 
      public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
       if (!validate(newValue)) { 
        textField.setStyle("-fx-text-fill: green;"); 
        textField.requestFocus(); 
       } else { 
        textField.setStyle("-fx-text-fill: black;"); 
       } 
      } 
     } 
    ); 

Es ist Funktion, die Boolean je nach Gültigkeit des textField value zurückgibt. Wenn der Wert nicht gültig ist, ändere ich die Textfarbe in ROT. Dann möchte ich mich auf ungültiges textField konzentrieren und den Benutzer zwingen, den Wert zu korrigieren. Kann es getan werden? Vielen Dank im Voraus.

Antwort

1

auch einen Listener für das focused Eigenschaft verwenden, die den Fokus zurücknimmt, wenn es irgendwo anders bewegt hat:

ChangeListener<Boolean> focusLossListener = (observable, wasFocused, isFocused) -> { 
    if (!isFocused) { 
     tf.requestFocus(); 
    } 
}; 
textField.textProperty().addListener(
     new ChangeListener<String>() { 
     @Override 
      public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
       textField.focusedProperty().removeListener(focusLossListener); 
       if (!validate(newValue)) { 
        textField.focusedProperty().addListener(focusLossListener); 
        textField.setStyle("-fx-text-fill: green;"); 
        textField.requestFocus(); 
       } else { 
        textField.setStyle("-fx-text-fill: black;"); 
       } 
      } 
     } 
    ); 
+0

In meinem Fall: final Change focusLossListener = new Change () { @Override public void geändert (ObservableValue beobachtbar, Boolean wasFocused, Boolean isFocused) { if (! isFokussiert) { textField.requestFocus(); } } }; –