关键版本关闭阶段

时间:2015-06-25 14:03:08

标签: java javafx keylistener hotkeys

我在javafx中创建了一个VBox,就像我的应用程序基于热键组合alt + j弹出一样。现在,我想要做的就是在释放组合键alt + j时关闭VBox。这是我的一段代码

final Stage dialog = new Stage();
EventHandler handler = new EventHandler<KeyEvent>()
{
    public void handle( KeyEvent event )
    {
        if ( event.isAltDown() && event.getCode() == KeyCode.J )
        {
            dialog.initStyle( StageStyle.UNDECORATED );
            // dialog.initModality(Modality.APPLICATION_MODAL);
            VBox dialogVbox = new VBox( 25 );
            dialogVbox.getChildren().add( new Text( "ABC" ) );
            Scene dialogScene = new Scene( dialogVbox, 300, 200 );
            dialog.setScene( dialogScene );
            dialog.show();
        }
        else if ( KeyEvent.KEY_RELEASED.equals( eventRel.isAltDown() && eventRel.getCode() == KeyCode.J ) )
        {
            dialog.hide();
        }
    }
};

scene.addEventHandler( KeyEvent.KEY_PRESSED, handler );

但这并没有像预期的那样关闭。 请指导我关闭关键版本的VBox

根据评论,我还为密钥发布创建了一个单独的处理程序: 那并没有关闭vBox

EventHandler handlerRel = new EventHandler<KeyEvent>() {
        public void handle(KeyEvent eventRel) {
        //event.consume();


             if(KeyEvent.KEY_RELEASED.equals(eventRel.isAltDown() && eventRel.getCode() == KeyCode.J))
                {
                    System.out.println("Inside released");
                    dialog.hide();
                }


            }};         


    scene.addEventHandler(KeyEvent.KEY_RELEASED, handlerRel);

由于

1 个答案:

答案 0 :(得分:1)

您正在将两个处理程序附加到同一场景。但是,一旦创建了第二个场景,即dialogScene,它就会变为活动状态,并且是正在接收事件的场景。因此,解决方案的修复方法是将KEY_RELEASED事件处理程序附加到dialogScene而不是原始场景。

                dialogScene.addEventHandler(KeyEvent.KEY_RELEASED, event -> {
                    if (event.isAltDown() && event.getCode() == KeyCode.J )
                    {
                        dialog.hide();
                    }
                });