comment simplement de mettre en œuvre un KeyListener?
public class MyPanel extends JPanel implements KeyListener {
private char c = 'e';
public MyPanel() {
this.setPreferredSize(new Dimension(500,500));
addKeyListener(this);
}
public void paintComponent(Graphics g) {
super.repaint();
g.drawString("the key that pressed is" + c, 250,250);
}
public void keyPressed(KeyEvent e) {
c=e.getKeyChar();
repaint();
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
c=e.getKeyChar();
repaint();
}
public static void main(String[] s) {
JFrame f=new JFrame();
f.getContentPane().add(new MyPanel());
f.pack();
f.setVisible(true);
}
}
J'ai essayé de lecture cette mais na pas réussi à comprendre comment simplement de mettre en œuvre un KeyListener. donc que dois-je modifier pour que cela fonctionne?
- Ce comportement que vous attendez d'un programme de travail? Si vous voulez changer les cordes à l'écran chaque fois que l'utilisateur appuie sur une touche, un simple appel à
repaint()
après chaque modification dec
devrait faire l'affaire. - ouais j'ai oublié de l'ajouter, mais il ne marche pas de toute façon...
Vous devez vous connecter pour publier un commentaire.
Voici les raisons pourquoi il ne fonctionne pas:
La
JPanel
n'a pas le focus du clavier. (L'image a elle.) Vous voulez probablementrequestFocus
lorsque le panneau est ajouté à l'écran.Vous devez appeler
repaint
lorsque le graphique doit changer.Vous ne devez pas appeler
repaint
dans lepaintComponent
méthode.Vous devez effacer la zone de dessin avant de tirer la corde à nouveau (sinon tous les personnages vont se retrouver sur le dessus de l'autre).
Ici est un exemple de travail:
Oh, et vous pouvez ajouter
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
pour faire la demande de mettre fin lorsque vous fermez la fenêtre. 🙂