gpt4 book ai didi

java - key 释放的最后阶段

转载 作者:行者123 更新时间:2023-12-01 11:22:48 26 4
gpt4 key购买 nike

我在 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 关闭按键释放

根据评论,我还创建了一个单独的 key 释放处理程序:那并没有关闭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);

谢谢

最佳答案

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

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

关于java - key 释放的最后阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31052645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com