将全局键侦听器附加到多个按钮

时间:2016-12-07 20:58:35

标签: java javafx global keylistener

我正在创建一个程序,让用户定义按钮,然后将按钮发送到合成器。 制作自己的自定义键盘。

现在这个键盘也应该对全局自定义热键作出反应。

这就是问题所在: 为了使它们全局化,我将它们附加到场景中,但随后每个新设置的热键都会覆盖以前的热键。 有一些代码:

        btn.getScene().setOnKeyPressed((KeyEvent e) -> {
            if (e.getText().equals(hotkey)) {
                btn.arm();
                btn.fire();
            }
        });
        btn.getScene().setOnKeyReleased((KeyEvent e) -> {
            if (e.getText().equals(hotkey)) {
                btn.disarm();
            }
        });

想到的直接解决方案是创建一个跟踪所有热键的arraylist,并让keylistener每次迭代它,以及另一个带有关联按钮的arraylists arraylist。

是否有更优雅,更直接的方式?

1 个答案:

答案 0 :(得分:2)

使用两个数组列表来跟踪热键和相关按钮最终会引导您进入一个复杂的解决方案,您必须实现一种方法来关联热键和按钮。

基于此,听起来像使用Map会解决你的问题。具有映射到关联按钮的特定热键的键值对。

在Map上查看所有方法的java文档:

https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

只需选择最适合您需求的实施方案。