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

addEventHandlerではなくsetOnActionを使用すると、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 に答える