【发布时间】:2016-06-25 12:00:41
【问题描述】:
我正在制作一个鼓应用程序,其中包含用作我的鼓的按钮。我想要的是按钮会在按键时触发,这样用户就可以用键盘打鼓。
我正在使用按钮的 keyTyped 事件来使用键执行声音。它工作正常,但首先需要将焦点放在该特定按钮上,因此我无法在按键时触发这些单独的按钮,因为焦点仅在一个按钮上。
private void btnBassDrumKeyTyped(java.awt.event.KeyEvent evt) {
if(evt.getKeyChar() == KeyEvent.VK_V){
try{
music=new FileInputStream(new File(bassSound));
AudioStream audios=new AudioStream(music);
AudioPlayer.player.start(audios);
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e.getLocalizedMessage());
}
}
}
我能想到的解决方案是:在表单加载时应用多个焦点(如果可能),使用不同的方式在按键时触发按钮事件(不是通过 KeyListener 和 KeyEvent)。
你们知道如何实施这些解决方案吗?或者如果你们有自己的解决方案,可以教我吗?多谢你们! :)
【问题讨论】:
-
KeyBindings 是你所需要的 - docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html / stackoverflow.com/a/22741216/1306811
-
支持使用鼠标或键盘调用动作的简单示例:stackoverflow.com/questions/35906270/…
-
如何创建一个使用 KeyBindings 播放声音的动作?抱歉,我在那个特定领域还不是很好。我正在使用 Netbeans btw @camickr
-
你已经说过,如果组件有焦点,它就可以工作。因此,您只需使用上面发布的代码创建一个 Action。然后为“V”键添加键绑定。我给你的链接显示了如何创建一个通用动作并将其绑定到数字 0 -9。概念是一样的。那么 Action 和 KeyStroke 就不同了。
标签: java swing netbeans keyboard keyevent