JavaFX TextField 文本验证
JavaFX TextField text validation
我有一个 listener
应用于我的领域:
nameTextField.addEventHandler(KeyEvent.KEY_TYPED, fieldChangeListener(50));
事件处理器:
private EventHandler<KeyEvent> fieldChangeListener(final Integer max_Lengh) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
TextField field = (TextField) event.getSource();
String text = field.getText();
// I need here something like:
if(KeyEvent.VK_ENTER){
// do special part for ENTER KEY
}
}
}
}
问题是 KeyEvent event
来自 javafx.scene.input.KeyEvent
,KeyEvent.VK_ENTER
来自 com.sun.glass.events.KeyEvent
。我不知道如何确定 ENTER 键是否触发了 KEY_TYPED
事件。
如果您想在文本更改时进行输入验证,您可以在 TextField
:
的 textProperty
上使用侦听器
textField.textProperty().addListener((observable, oldValue, newValue) ->
System.out.println("Input Validation"));
要检测何时按下 Enter,您可以使用 onActionProperty
textField.setOnAction(event -> System.out.println("Enter pressed: Word Check"));
如果你想阻止用户输入未通过验证逻辑的字符,那么除了监听 textProperty˙
,你可以使用 TextFormatter
(仅此 TextField
接受整数):
textField.setTextFormatter(new TextFormatter<>(change ->
(change.getControlNewText().matches("([1-9][0-9]*)?")) ? change : null));
我有一个 listener
应用于我的领域:
nameTextField.addEventHandler(KeyEvent.KEY_TYPED, fieldChangeListener(50));
事件处理器:
private EventHandler<KeyEvent> fieldChangeListener(final Integer max_Lengh) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
TextField field = (TextField) event.getSource();
String text = field.getText();
// I need here something like:
if(KeyEvent.VK_ENTER){
// do special part for ENTER KEY
}
}
}
}
问题是 KeyEvent event
来自 javafx.scene.input.KeyEvent
,KeyEvent.VK_ENTER
来自 com.sun.glass.events.KeyEvent
。我不知道如何确定 ENTER 键是否触发了 KEY_TYPED
事件。
如果您想在文本更改时进行输入验证,您可以在 TextField
:
textProperty
上使用侦听器
textField.textProperty().addListener((observable, oldValue, newValue) ->
System.out.println("Input Validation"));
要检测何时按下 Enter,您可以使用 onActionProperty
textField.setOnAction(event -> System.out.println("Enter pressed: Word Check"));
如果你想阻止用户输入未通过验证逻辑的字符,那么除了监听 textProperty˙
,你可以使用 TextFormatter
(仅此 TextField
接受整数):
textField.setTextFormatter(new TextFormatter<>(change ->
(change.getControlNewText().matches("([1-9][0-9]*)?")) ? change : null));