KeyEvent停止侦听JavaFX

KeyEvent停止侦听JavaFX,java,javafx,keyevent,Java,Javafx,Keyevent,我有一个非常简单的关键事件: @Override public void start(Stage stage) throws Exception { Group root = new Group(); Scene scene = new Scene(root); Canvas canvas = new Canvas( 900, 700 ); scene.setOnKeyPressed(new EventHandler<KeyEvent>() {

我有一个非常简单的关键事件:

@Override
public void start(Stage stage) throws Exception {
    Group root = new Group();
    Scene scene = new Scene(root);
    Canvas canvas = new Canvas( 900, 700 );

    scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {

            switch (ke.getCode()) {
                case UP:
                    System.out.println("UP");
                    break;
                case DOWN:
                    System.out.println("DOWN");
                    break;
                case LEFT:
                    System.out.println("LEFT");
                    break;
                case RIGHT:
                    System.out.println("RIGHT");
                    break;
                case ENTER:
                    //ke.consume();
                    break;
                default:
                    break;
            }
        }});
@覆盖
public void start(Stage)引发异常{
组根=新组();
场景=新场景(根);
画布=新画布(900700);
scene.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent ke){
开关(ke.getCode()){
个案:
System.out.println(“UP”);
打破
按大小写:
System.out.println(“向下”);
打破
案例左:
系统输出打印项次(“左”);
打破
案例权利:
System.out.println(“右”);
打破
案例输入:
//消费();
打破
违约:
打破
}
}});
我想达到的目标: 我开始运行程序,如果我按下up、down、left、right键,输出会向我回写up、down、left、right(正确无问题)。 但是!如果我按回车键,如果我将按向上、向下、左、右、回车键或其他键,则不会将输出写回向上、向下、左、右


因此,当我按下回车按钮时,我想停止按键事件的“运行”。

你有几个机会,这两个是我首先想到的

1)将密钥事件的侦听器存储为类的成员,然后按ENTER键取消注册。

private EventHandler<KeyEvent> keyHandler;


@Override
public void start(Stage stage) {
    final Scene scene = new Scene(new Group());
    stage.setTitle("Table View Sample");
    stage.setWidth(450);
    stage.setHeight(500);

    keyHandler = new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {

            switch (ke.getCode()) {
                case ENTER:
                    scene.removeEventHandler(KeyEvent.KEY_PRESSED, keyHandler);
                    break;
                case UP:
                    System.out.println("UP");
                    break;
                case DOWN:
                    System.out.println("DOWN");
                    break;
                case LEFT:
                    System.out.println("LEFT");
                    break;
                case RIGHT:
                    System.out.println("RIGHT");
                    break;


                default:
                    break;
            }
        }};

   scane.addEventHandler(KeyEvent.KEY_PRESSED, keyHandler);
private Boolean enterPressed = false;

@Override
public void start(Stage stage) {
    final Scene scene = new Scene(new Group());
    stage.setTitle("Table View Sample");
    stage.setWidth(450);
    stage.setHeight(500);

   scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {

            if(enterPressed){
                ke.consume();
                return;
            }

            switch (ke.getCode()) {
                case ENTER:
                    enterPressed = true;
                    break;
                case UP:
                    System.out.println("UP");
                    break;
                case DOWN:
                    System.out.println("DOWN");
                    break;
                case LEFT:
                    System.out.println("LEFT");
                    break;
                case RIGHT:
                    System.out.println("RIGHT");
                    break;

                default:
                    break;
            }
        }});
private EventHandler-keyHandler;
@凌驾
公众假期开始(阶段){
最终场景=新场景(新组());
stage.setTitle(“表格视图示例”);
舞台布景宽度(450);
舞台设置高度(500);
keyHandler=新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent ke){
开关(ke.getCode()){
案例输入:
场景.removeEventHandler(按下KeyEvent.KEY_,keyHandler);
打破
个案:
System.out.println(“UP”);
打破
按大小写:
System.out.println(“向下”);
打破
案例左:
系统输出打印项次(“左”);
打破
案例权利:
System.out.println(“右”);
打破
违约:
打破
}
}};
scane.addEventHandler(按下KeyEvent.KEY_,keyHandler);
2)按ENTER键,将布尔值存储到成员,如果设置了此成员,则使用事件。

private EventHandler<KeyEvent> keyHandler;


@Override
public void start(Stage stage) {
    final Scene scene = new Scene(new Group());
    stage.setTitle("Table View Sample");
    stage.setWidth(450);
    stage.setHeight(500);

    keyHandler = new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {

            switch (ke.getCode()) {
                case ENTER:
                    scene.removeEventHandler(KeyEvent.KEY_PRESSED, keyHandler);
                    break;
                case UP:
                    System.out.println("UP");
                    break;
                case DOWN:
                    System.out.println("DOWN");
                    break;
                case LEFT:
                    System.out.println("LEFT");
                    break;
                case RIGHT:
                    System.out.println("RIGHT");
                    break;


                default:
                    break;
            }
        }};

   scane.addEventHandler(KeyEvent.KEY_PRESSED, keyHandler);
private Boolean enterPressed = false;

@Override
public void start(Stage stage) {
    final Scene scene = new Scene(new Group());
    stage.setTitle("Table View Sample");
    stage.setWidth(450);
    stage.setHeight(500);

   scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {

            if(enterPressed){
                ke.consume();
                return;
            }

            switch (ke.getCode()) {
                case ENTER:
                    enterPressed = true;
                    break;
                case UP:
                    System.out.println("UP");
                    break;
                case DOWN:
                    System.out.println("DOWN");
                    break;
                case LEFT:
                    System.out.println("LEFT");
                    break;
                case RIGHT:
                    System.out.println("RIGHT");
                    break;

                default:
                    break;
            }
        }});
private Boolean enterPressed=false;
@凌驾
公众假期开始(阶段){
最终场景=新场景(新组());
stage.setTitle(“表格视图示例”);
舞台布景宽度(450);
舞台设置高度(500);
scene.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent ke){
如果(按回车键){
消费();
返回;
}
开关(ke.getCode()){
案例输入:
enterPressed=true;
打破
个案:
System.out.println(“UP”);
打破
按大小写:
System.out.println(“向下”);
打破
案例左:
系统输出打印项次(“左”);
打破
案例权利:
System.out.println(“右”);
打破
违约:
打破
}
}});

两人都在工作,随便你选。

太谢谢你了!我救了我一天