java - 一个键上有多个键绑定(bind)?

标签 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”方法,该音符就会播放。

有什么办法可以解决这个问题吗?

我遇到的第二个问题是,我似乎无法让它知道何时再次释放 key 。 我尝试了 .put(KeyStroke.getKeyStroke("released q"), "DoSomething"); 但这似乎没有任何作用。

提前致谢!

最佳答案

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

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

  • 我会构建我的程序,使其符合模型- View -控制 (MVC) 设计模式标准之一。
  • 我希望我的绑定(bind)成为控件的一部分,
  • 该操作的唯一功能是更改模型的状态,即已按下或释放某物键。
  • 模型可以有许多 View 监听器,并且它们都可以根据模型状态的变化做出适当的响应,这里是我对模型更改的两个不同响应的位置。

关于java - 一个键上有多个键绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470324/

相关文章:

java - JFrame.dispose() 与 System.exit()

java - 序列化具有关键事件的游戏状态。检索副本不需要我的键盘事件?

java - 从 HashMap 创建 JList

c - 维吉尼亚密码。键的大小

Java Swing 按键事件库

java - 无法使用 Spring 执行器 - 创建 bean CacheMetricsRegistrarConfiguration 时出错

java - DDD (java) 聚合根和持久性

java - Android studio, File.properties 重新打开应用后删除

java - 使用 Java 发出 DNS 请求并计时响应

Bash 脚本似乎按了不需要的返回键