Java 一个键上有多个键绑定?

Java 一个键上有多个键绑定?,java,swing,key,key-bindings,keystroke,Java,Swing,Key,Key Bindings,Keystroke,我正在用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(JButto

我正在用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”)
但这似乎没有任何作用


提前谢谢

我不是这方面的专家,但我认为,如果第二个绑定不阻止第一个和所有以前的绑定,就无法在同一个键笔划上添加两个键绑定。换句话说,我相信对于每个特定的击键和输入映射,只有一个绑定是可能的

话虽如此,我还是会采取不同的做法:

  • 我会按照模型视图控制(MVC)设计模式标准之一构建我的程序
  • 我会让我的装订成为控制的一部分
  • 该操作的唯一功能是更改模型的状态,即按下或释放“某物”键
  • 模型可以有许多视图侦听器,它们都可以根据模型状态的变化做出适当的响应,在这里我可以找到对模型变化的两种不同响应

谢谢!我做的有点不同,它现在可以工作了。“如果键存在多个绑定,则只使用找到的第一个有效绑定。”它还表示“由于搜索组件的顺序不可预测,因此在聚焦窗口绑定中避免重复!”