【发布时间】:2017-05-09 20:54:27
【问题描述】:
我有一个 EventHandler,我在 TextFields 上设置为 event filter。当我编写课程时,我通过在事件上调用 getSource() 并将其转换为 TextField 来获取源 TextField。
EventHandler 的代码:
public class NumberFilter implements EventHandler<KeyEvent> {
public final int maxLength;
public NumberFilter(int maxLength) {
this.maxLength = maxLength;
}
@Override
public void handle(KeyEvent event) {
TextField textField = (TextField) event.getSource(); //<-- is this cast okay?
//consume event if there is too much text or the input isn't a number.
if (textField.getText().length() >= maxLength || !event.getCharacter().matches("[0-9]")) {
event.consume();
}
}
}
按照标准的 java 约定,这种转换可以吗?我怎样才能编写这个类,以便它不能在任何地方使用,除了作为 TextField 的事件过滤器?
【问题讨论】:
-
您可以编写自定义 TextField,它将使用匿名类或私有类与您的过滤器。
-
@MGorgon 我最初将 EventHandler 作为一个匿名类,但后来我决定我想在其他地方使用它,并将它变成一个自己的类。
-
根本不要这样做。 (一方面,如果用户通过用鼠标调出上下文菜单来粘贴文本,它无论如何都会完全绕过您的所有检查。)在文本字段上使用
TextFormatter。
标签: java javafx event-handling conventions