如何在控制器中设置JavaFX中的设置键盘快捷键

时间:2016-11-18 16:44:02

标签: java javafx controller

我的程序有多个标签,每个标签都有自己的控制器。我想在每个标签上都有不同的键盘快捷键。

但是我找不到这样做的方法,因为我需要将EventFilter添加到Scene,但是当Controller.initialize()运行时,场景仍为空。怎么解决这个问题?

目前我正在这样做:

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()返回null,这可能是因为当控制器初始化时场景尚未设置。

1 个答案:

答案 0 :(得分:1)

在玩完之后我找到了以下解决方案。它观察场景属性,当场景发生变化时,它会删除旧的侦听器并添加一个新的侦听器。

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);
    }
});