一个键上有多个键绑定?

时间:2014-12-14 14:30:46

标签: 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(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"); 但这似乎没有做任何事情。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不是这方面的专家,但我不认为你可以在同一个按键上添加两个键绑定,而第二个绑定不会阻止第一个和所有先前的绑定。换句话说,我相信每个特定的击键和输入映射只能进行一次绑定。

话虽如此,我也是这样做的:

  • 我的程序结构符合模型 - 视图 - 控制(MVC)设计模式标准之一。
  • 我的绑定是控件的一部分,
  • 动作的唯一功能是更改模型的状态,这里是按下或释放了某些键。
  • 模型可以有很多View侦听器,他们都可以根据模型状态的变化做出响应,这里是我对模型的两个不同响应&# 39;改变位于。