我正在制作一个鼓按钮,它有按钮作为我的鼓。我想要的是按键会在按键时触发,这样用户就可以用键盘弹奏鼓。
我正在使用按钮的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)。
你们知道如何实施这些解决方案,或者如果你有自己的解决方案,你能教我吗?多谢你们! :)
答案 0 :(得分:0)
谢谢大家! @Gorbles,@ camickr @MadProgrammer
是的,似乎是关键绑定'确切的答案。
bassDrumAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try{
music=new FileInputStream(new File("C:\\Users\\AMMUYUTAN\\Documents\\Java Specialization Course\\CS182P\\AudioSync\\src\\sound\\KickSound.WAV"));
AudioStream audios=new AudioStream(music);
AudioPlayer.player.start(audios);
}
catch(Exception ex){
JOptionPane.showMessageDialog(null,ex.getLocalizedMessage());
}
}
};
InputMap inputMap = btnBassDrum.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke("B"), "hitBassDrum");
btnBassDrum.getActionMap().put("hitBassDrum", bassDrumAction);