【问题标题】:java: Trigger KeyEvent without focus on button or apply focus on multiple buttons to trigger KeyEventjava:在不关注按钮的情况下触发KeyEvent或将焦点应用于多个按钮以触发KeyEvent
【发布时间】: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)。

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

【问题讨论】:

标签: java swing netbeans keyboard keyevent


【解决方案1】:

谢谢大家! @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);

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多