Hug*_*ero 4 event-handling textfield javafx-2
我尝试使用addEventHandler()向文本字段添加动作处理程序,但似乎没有工作.它甚至可能是一个bug吗?如果我尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
文档说它应该是可能的,但找不到任何其他东西.有任何想法吗?
如果使用setOnAction而不是addEventHandler,那么您将能够捕获TextField的ActionEvent.
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
System.out.println("ActionEvent: " + event);
}
});
Run Code Online (Sandbox Code Playgroud)
我不知道为什么addEventHandler代码不捕获事件.我也尝试了addEventFilter,这对我来说也不起作用(JavaFX 2.2).
请注意,当您按TextField上的Enter键时,TextField将生成一个ActionEvent.