我正在使用 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”方法,该音符就会播放。
有什么办法可以解决这个问题吗?
我遇到的第二个问题是,我似乎无法让它知道何时再次释放 key 。
我尝试了 .put(KeyStroke.getKeyStroke("released q"), "DoSomething");
但这似乎没有任何作用。
提前致谢!
最佳答案
我不是这方面的专家,但我不认为您可以在同一击键上添加两个键绑定(bind),而第二个绑定(bind)不会阻止第一个和所有先前的绑定(bind)。换句话说,我相信每个特定的击键和输入映射只能有一个绑定(bind)。
话虽如此,我会采取不同的做法:
- 我会构建我的程序,使其符合模型- View -控制 (MVC) 设计模式标准之一。
- 我希望我的绑定(bind)成为控件的一部分,
- 该操作的唯一功能是更改模型的状态,即已按下或释放某物键。
- 模型可以有许多 View 监听器,并且它们都可以根据模型状态的变化做出适当的响应,这里是我对模型更改的两个不同响应的位置。
关于java - 一个键上有多个键绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470324/