2016-11-14 127 views
0

JavaFX中有没有可能关注textField? 我使用侦听器对textField进行验证。如何在JavaFX中禁用从textField移动焦点

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;"); 
       } 
      } 
     } 
    ); 

它是根据textField值有效性返回布尔值的函数。如果值无效,则我将文本颜色更改为红色。然后,我想继续关注无效的textField并强制用户更正值。 可以这样做吗? 在此先感谢。

回答

1

还使用了侦听器focused财产收回的焦点,当它移到别的地方:

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

在我的情况: 最终的ChangeListener focusLossListener =新的ChangeListener (){ @覆盖 public void change(ObservableValue <?extends Boolean> observable,Boolean wasFocused,Boolean isFocused){if(!isFocused){ textField.requestFocus(); } } }; –