【发布时间】:2014-12-14 14:30:46
【问题描述】:
我正在使用 JFrame 制作钢琴,但我遇到了一个小问题。 我希望钢琴的琴键在按下时变为绿色,并弹奏一个音符。
b.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('q'), "playD");
b.getActionMap().put("playD", playC); //playC refers to another Action class
b.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('q'), "SetBg");
b.getActionMap().put("SetBg", db); //db refers to another Action class
但是,这些方法会相互覆盖。 现在,只有颜色发生变化,并且没有播放音符。 如果我删除“SetBg”方法,音符就会播放。
有没有办法解决这个问题?
我遇到的第二个问题是,我似乎无法让它知道何时再次真正释放密钥。
我试过.put(Keystroke.getKeyStroke("released q"), "DoSomething");
但这似乎没有任何作用。
提前致谢!
【问题讨论】:
-
How to Use Key Bindings 的 键绑定如何工作部分对此进行了解释。 “如果键存在多个绑定,则仅使用找到的第一个有效绑定。”
-
它还说“由于搜索组件的顺序不可预测,避免重复的 WHEN_IN_FOCUSED_WINDOW 绑定!”
标签: java swing key key-bindings keystroke