【发布时间】:2016-10-17 15:25:41
【问题描述】:
给定
JavaFX 应用,输入TextField 并提交Button
TextField 附加了一个EventHandler,因此如果没有输入文本,Button 应该被禁用,反之亦然。
这是我的代码:
button.setDisable(true); // initially disabled
textField.setOnKeyTyped(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (textField.getText().trim().isEmpty()) { // if blank textfield
button.setDisable(true);
} else {
button.setDisable(false);
}
}
});
两个控件都已正确初始化。而据我所知,KeyTyped 和 KeyPressed/Released 的区别在于 Typed 是针对实际可以输入和显示的字符;而 Pressed/Released 适用于任何键盘键,包括 Ctrl、Alt...
问题
我输入textField 一个字符,button 仍然被禁用!如果我输入 2 个或更多字符,它就会启用!
但是,如果我执行以下操作:
button.setDisable(true);
textField.setOnKeyReleased(
/*
exact same code as above
*/
);
我的问题会解决的。
问题
为什么?我的代码中的缺陷在哪里?为什么 KeyTyped 不能按预期工作?
【问题讨论】:
标签: java javafx properties listener textfield