java:触发KeyEvent而不关注按钮或将焦点应用于多个按钮以触发KeyEvent

时间:2016-03-10 14:56:03

标签: java swing netbeans keyboard keyevent

我正在制作一个鼓按钮,它有按钮作为我的鼓。我想要的是按键会在按键时触发,这样用户就可以用键盘弹奏鼓。

我正在使用按钮的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)。

你们知道如何实施这些解决方案,或者如果你有自己的解决方案,你能教我吗?多谢你们! :)

1 个答案:

答案 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);