2016-03-10 4 views
0

Je crée une application de batterie qui a des boutons qui servent de batterie. Ce que je veux, c'est que les boutons se déclenchent à la pression de la touche pour que l'utilisateur puisse jouer de la batterie avec le clavier. J'utilise l'événement keyTyped d'un bouton pour exécuter un son à l'aide d'une touche. Cela fonctionne bien, mais d'abord l'accent doit être mis sur ce bouton spécifique en premier, par conséquent je ne peux pas déclencher ces boutons séparés à la pression de la touche parce que le focus est seulement dans un bouton.java: Trigger KeyEvent sans focus sur le bouton ou appliquer le focus sur plusieurs boutons pour déclencher KeyEvent

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()); 
       }  
    } 
} 

Les solutions que je peux penser sont: l'application de plusieurs porte sur la forme de charge (si possible), utiliser de manière différente pour déclencher l'événement de bouton sur appuyer sur la touche (et non par KeyListener et KeyEvent). Est-ce que vous savez comment implémenter ces solutions ou si vous avez votre propre solution, pouvez-vous m'apprendre? Merci les gars! :)

+0

KeyBindings sont ce que vous avez besoin - https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html/http://stackoverflow.com/a/22741216/1306811 – Gorbles

+0

Exemple simple qui prend en charge l'appel d'une action à l'aide de la souris ou du clavier: http://stackoverflow.com/questions/35906270/how-to-put-actionlistenerand-actioncommand-to-multiple-jbuttons/35906545#35906545 – camickr

+0

Comment créer une action qui joue le son en utilisant KeyBindings? Désolé, je ne suis pas encore très bon dans ce domaine particulier. J'utilise Netbeans btw @camickr – Andre

Répondre

0

Merci à tous! @Gorbles, @camickr @MadProgrammer

Oui ressemble à des raccourcis clavier 'la réponse exacte.

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