4

我尝试使用 addEventHandler() 将操作处理程序添加到文本字段,但似乎不起作用。它甚至可能是一个错误吗?如果我尝试使用 Button 控件,一切都很好。

这是示例代码:

package com.teste;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class EventHandlerTest extends Application {

@Override
public void start(Stage stage) throws Exception {
    // TODO Auto-generated method stub
    stage.setTitle("Custom JavaFX Event");
    TextField btn = new TextField();
    btn.setId("Fire Button");
    btn.setText("Fire MyEvent'");

    btn.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {

            if (event.getEventType().equals(ActionEvent.ACTION)) {
                System.out.println("ActionEvent 2");
            }
        }     
    }); 

    StackPane root = new StackPane();
    root.getChildren().add(btn);
    stage.setScene(new Scene(root, 300, 250));
    stage.show();
}

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    launch(args);
}

}

文档说这应该是可能的,但找不到其他任何东西。有任何想法吗?

4

2 回答 2

5

如果您使用setOnAction而不是addEventHandler,那么您将能够捕获 TextField 的 ActionEvent。

btn.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent event) {
        System.out.println("ActionEvent: " + event);
    }     
}); 

我不知道为什么 addEventHandler 代码没有捕获事件。我也尝试了 addEventFilter ,但这对我也不起作用(JavaFX 2.2)。

请注意,当您在 TextField 上按 Enter 键时,TextField 将生成一个 ActionEvent。

于 2012-08-27T22:54:27.453 回答
0

在 java 8 中现在是可能的

btn.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
        System.out.println("ActionEvent: " + event);
        }
    });

//Lambda Notation
btn.addEventHandler(ActionEvent.ACTION, event -> {
        System.out.println("ActionEvent: " + event);
    });
于 2016-03-17T13:35:25.410 回答