2013-05-07 3 views
0
public class KL implements KeyListener { 

public static void main(String[] args) { 
     final JPopupMenu popup = new JPopupMenu(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 

    } 

@Override 
public void keyPressed(KeyEvent arg0) { 
    System.out.println(arg0.getKeyChar()); 
} 

@Override 
public void keyReleased(KeyEvent e) { 
    System.out.println(e.getKeyChar()); 

} 

@Override 
public void keyTyped(KeyEvent e) { 
    System.out.println(e.getKeyChar()); 

} 
} 

C'est ma classe, c'est probablement quelque chose de vraiment stupide de ma part, mais mon KeyListener ne fonctionne pas ici. Rien ne se lève sur la console.KeyListener ne fonctionne pas

+1

Recherche sur le forum. Cette question est posée quotidiennement. Vous pouvez commencer avec les suggestions trouvées sous la rubrique 'Related''' droite de cette page. – camickr

Répondre

2

Commençons par le fait que vous n'êtes pas attaché l'auditeur à quoi que ce soit, de passer ensuite au fait que vous devriez vraiment utiliser Key Bindings

Et l'exemple

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 
import javax.swing.AbstractAction; 
import javax.swing.ActionMap; 
import javax.swing.InputMap; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.KeyStroke; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestTableEditing { 

    public static void main(String[] args) { 
     new TestTableEditing(); 
    } 

    public TestTableEditing() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JLabel key; 
     private int counter = 0; 

     public TestPane() { 
      key = new JLabel("..."); 
      add(key); 
      InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW); 
      ActionMap am = getActionMap(); 
      im.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "A.pressed"); 
      am.put("A.pressed", new AbstractAction() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("A was pressed"); 
        key.setText("A was pressed " + (++counter)); 
       } 
      }); 
     } 

    } 

} 
0

I savoir ceci est un vieux poste mais je voulais mettre en ligne afin que quelqu'un comme moi puisse le trouver ....

J'ai travaillé sur ce problème pendant des heures avant de le comprendre. Assurez-vous que votre composant a le focus. Par exemple, j'ai tout mon activité dans un va JPanel personnalisé nommé SpaceShipPanel:

class SpaceShipPanel 
{ 
    //instance variables 
    //Now my constructor 
    SpaceShipPanel(){ 
     //bla bla blah 
     setFocusable(true);//THIS LINE IS WHAT SAVED ME!! 
    } 
} 

D'après ce que j'entends, KeyBindings sont la meilleure voie, mais la classe que je prends ne couvre pas ce sujet. Espérons que cela permettra d'éviter à quelqu'un de battre sa tête contre le mur.