【问题标题】:Closing stage on key release密钥释放的最后阶段
【发布时间】:2015-09-12 04:41:37
【问题描述】:

我在 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);

谢谢

【问题讨论】:

  • 您只将事件处理程序添加到KeyEvent.KEY_PRESSED,您还必须添加它(或为KeyEvent.KEY_RELEASED 创建一个单独的。
  • 我只是看到编辑后的代码谢谢
  • 第二个处理程序中的 if 看起来不正常。我认为您正在对那里的按钮检查结果进行equals 检查。含义:if 条件不应该和第一个处理程序中的一样吗?
  • 这是对密钥释放的检查,所以当我释放密钥时,我的 vBox 应该关闭。
  • 这个处理程序只在发布时执行。

标签: java javafx keylistener hotkeys


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多