Java 通过fxml添加EventFilter

Java 通过fxml添加EventFilter,java,javafx,javafx-8,fxml,Java,Javafx,Javafx 8,Fxml,现在我能做到了 public TextField lastmonthbox; public void initialize()throws Exception{ lastmonthbox.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() { public void handle( KeyEvent t ) { char ar[] = t.getCharacte

现在我能做到了

public TextField lastmonthbox;
public void initialize()throws Exception{
    lastmonthbox.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
        public void handle( KeyEvent t ) {
            char ar[] = t.getCharacter().toCharArray();
            char ch = ar[t.getCharacter().toCharArray().length - 1];
            if (!(ch >= '0' && ch <= '9' || ch=='.')) {
                System.out.println("The char you entered is not a number");
                t.consume();
            }
        }
    });

}
public TextField lastmonthbox;
public void initialize()引发异常{
lastmonthbox.addEventFilter(KeyEvent.KEY_类型,新的EventHandler()){
公共无效句柄(KeyEvent t){
char ar[]=t.getCharacter().toCharArray();
char ch=ar[t.getCharacter().toCharArray().length-1];

如果(!(ch>='0'&&cha可以,但是您可以根据需要自定义控件。例如

<MyTextField ... onKeyTypedFilter="#yourFilter" />


然后在后端进行一些反射。但是值得吗?

根据Uluk的回答,您可以执行以下操作。无需反射,因为FXMLLoader已经负责将“#…”转换为EventHandler对象


请注意,这只是结构:这不是一种创建纯数字文本字段的特别健壮的方法。例如,用户可以使用击键或鼠标在其中复制和粘贴任意文本。

我认为这不需要任何反射,不是吗?只是一个
ObjectProperty
和道具上的更改侦听器只是添加和删除了事件过滤器。但无论如何可能不值得。@James_D“#yourFilter”是一个字符串,因此您需要通过反射从实例类中按名称查找方法/字段。FXMLLoader已经做到了这一点……这没有什么用处,但可能是一个有趣的学术练习:@James_D,干得好!您似乎遵循了JavaFX的原始方法。将您的链接作为答案发布,确保它对其他人也有帮助。FXML的文档是。不可能列出一个完整的标记列表,因为可以用FXML标记实例化任意类(包括您编写的类)。