MouseListener/KeyListener ne fonctionne pas (Composite)
Je suis en train de faire un petit projet qui implique la souris et touche les auditeurs dans un Composite. Malheureusement, aucune de ces méthodes sont appelées lorsque j'utilise la souris/clavier. J'ai travaillé avec des JPanels/JFrame/JApplet et JComponents avant. Les extraits de code sont indiqués ci-dessous:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.Scanner;
public class Hello extends JPanel implements KeyListener, MouseListener{
JPanel panel = new JPanel();
JFrame frame = new JFrame();
public Hello(){
addKeyListener(this);
addMouseListener(this);
}
public static void main(String [] args){
Hello play = new Hello();
play.setPanel();
}
public void setPanel(){
panel.setLayout(null);
frame.add(panel);
frame.setLayout(null);
panel.setBounds(0,0,100,100);
frame.setVisible(true);
panel.setVisible(true);
panel.setFocusable(true);
frame.setSize(100,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void keyTyped(KeyEvent evt){
System.out.println("keytyped");
}
public void keyPressed(KeyEvent evt){
System.out.print("keypressed");
}
public void keyReleased(KeyEvent evt){
System.out.println("keyreleased");
}
public void mousePressed(MouseEvent evt){
System.out.println("mousepressed");
}
public void mouseReleased(MouseEvent evt){
System.out.println("mousereleased");
}
public void mouseClicked(MouseEvent evt){
System.out.println("mouseclicked");
}
public void mouseEntered(MouseEvent evt){
System.out.println("mousenentered");
}
public void mouseExited(MouseEvent evt){
System.out.println("mouseexited");
}
}
Hors sujet: je reçois l'erreur
Votre post semble contenir du code qui n'est pas correctement formaté sous forme de code. Veuillez tiret tous les code par 4 espaces à l'aide du code bouton de barre d'outils ou appuyez sur CTRL+K raccourci clavier. Pour plus d'édition de l'aide, cliquez sur [?] icône de barre d'outils.
Je n'ai aucune idée de comment le résoudre. Parfois, j'ai tout mis dans le code et il ne veut toujours pas se soumettre.
OriginalL'auteur GoldenLyfe | 2012-12-29
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à Java KeyListener pour JFrame est de répondre?.
Vous devez enregistrer votre
KeyListener
etMouseListener
pour chaqueJComponent
que vous souhaitez écouter:Edit:
Clés et les événements de la souris ne sont tiré de la
JComponent
qui a le focus à l'époque. De ce fait il semble y avoir un consensus pour dire que les Raccourcis clavier peuvent être favorables à la KeyListeners. Les deux ont leurs applications, cependant, et il n'y a aucune règle dure et rapide ici. Avoir une lecture de " Comment Écrire un Écouteur d' " et " Comment Écrire une Clé de Liaison " et vous obtiendrez l'essentiel.Yup, le seul
JComponent
qui sera de déclencher des événements est l'un avec de l'focus
à l'époque. Comment Écrire un Écouteur et Comment Écrire une Clé de Liaison briser les différences entre les deux, qui sont très subtiles, mais la peine à saisir avant d'écrire du code que vous aurez chuck plus tard.s'il vous plaît faites partie commentaire de votre réponse. KeyListeners sont à éviter (en partie pour cette raison) en faveur de Raccourcis clavier
OriginalL'auteur Sean Connolly
Préférable d'éviter d'utiliser
KeyListeners
avecJPanel
, utilisez Les raccourcis clavier à la place.JPanel
ne peut pas obtenir le focus ne peut donc pas interagir avecKeyEvents
. À l'aide deKeyBindings
, vous pouvez associer une Action à une touche, même lorsqu'un composant n'a pas le focus.OriginalL'auteur Reimeus
Essayez plutôt ceci:
Vous devez ajouter les auditeurs à chaque composant que vous souhaitez écouter.
OriginalL'auteur aly