如何从控制器在JavaFX中设置键盘快捷键
我有一个程序,它有多个选项卡,每个选项卡都有自己的控制器。我想在每个选项卡上都有不同的键盘快捷键 但是,我找不到这样做的方法,因为我需要将EventFilter添加到场景中,但当Controller.initialize()运行时,场景仍然为null。如何解决这个问题 目前我正在这样做:如何从控制器在JavaFX中设置键盘快捷键,java,javafx,controller,Java,Javafx,Controller,我有一个程序,它有多个选项卡,每个选项卡都有自己的控制器。我想在每个选项卡上都有不同的键盘快捷键 但是,我找不到这样做的方法,因为我需要将EventFilter添加到场景中,但当Controller.initialize()运行时,场景仍然为null。如何解决这个问题 目前我正在这样做: final KeyCombination openDir = new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN, KeyCombinat
final KeyCombination openDir = new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN, KeyCombination.SHIFT_DOWN);
list.getScene().addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (openDir.match(event)) {
logger.debug("Event match.");
}
});
问题是,
list.getScene()
返回空值,这可能是因为控制器初始化时场景尚未设置。在尝试之后,我找到了以下解决方案。它观察场景属性,当场景更改时,它会删除旧的侦听器并添加新的侦听器
final KeyCombination openDir = new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN, KeyCombination.SHIFT_DOWN);
EventHandler<KeyEvent> eventHandler = event -> {
if (openDir.match(event)) {
logger.debug("Event match.");
}
};
list.sceneProperty().addListener((observable, oldValue, newValue) -> {
if (oldValue != null) {
oldValue.removeEventFilter(KEY_PRESSED, eventHandler);
}
if (newValue != null) {
newValue.addEventFilter(KEY_PRESSED, eventHandler);
}
});
final KeyCombination openDir=新的KeyCodeCombination(KeyCode.O,KeyCombination.CONTROL\u DOWN,KeyCombination.SHIFT\u DOWN);
EventHandler EventHandler=事件->{
if(openDir.match(事件)){
debug(“事件匹配”);
}
};
list.sceneProperty().addListener((可观察、旧值、新值)->{
if(oldValue!=null){
removeEventFilter(按下键,eventHandler);
}
if(newValue!=null){
addEventFilter(按下键,eventHandler);
}
});
也许您应该为控制器添加一个方法addListener
,该方法添加事件侦听器,并在列表成为场景的一部分时调用该方法。您可以更具体地说明如何执行该操作吗?我试图添加监听器,但在Android中没有类似的onShow()事件。很高兴我能够帮助您!