2016-11-14 45 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(); } } }; –