【发布时间】: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