Mon (Java/Swing) MouseListener n'est pas à l'écoute, m'aider à comprendre pourquoi
-
09-06-2019 - |
Question
Donc j'ai un JPanel
la mise en œuvre de MouseListener
et MouseMotionListener
:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DisplayArea extends JPanel implements MouseListener, MouseMotionListener {
public DisplayArea(Rectangle bounds, Display display) {
setLayout(null);
setBounds(bounds);
setOpaque(false);
setPreferredSize(new Dimension(bounds.width, bounds.height));
this.display = display;
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
if (display.getControlPanel().Antialiasing()) {
g2.addRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
}
g2.setColor(Color.white);
g2.fillRect(0, 0, getWidth(), getHeight());
}
public void mousePressed(MouseEvent event) {
System.out.println("mousePressed()");
mx1 = event.getX();
my1 = event.getY();
}
public void mouseReleased(MouseEvent event) {
System.out.println("mouseReleased()");
mx2 = event.getX();
my2 = event.getY();
int mode = display.getControlPanel().Mode();
switch (mode) {
case ControlPanel.LINE:
System.out.println("Line from " + mx1 + ", " + my1 + " to " + mx2 + ", " + my2 + ".");
}
}
public void mouseEntered(MouseEvent event) {
System.out.println("mouseEntered()");
}
public void mouseExited(MouseEvent event) {
System.out.println("mouseExited()");
}
public void mouseClicked(MouseEvent event) {
System.out.println("mouseClicked()");
}
public void mouseMoved(MouseEvent event) {
System.out.println("mouseMoved()");
}
public void mouseDragged(MouseEvent event) {
System.out.println("mouseDragged()");
}
private Display display = null;
private int mx1 = -1;
private int my1 = -1;
private int mx2 = -1;
private int my2 = -1;
}
Le problème, c'est qu'aucun de ces fonctions de la souris sont jamais appelés. DisplayArea
est créé comme ceci:
da = new DisplayArea(new Rectangle(CONTROL_WIDTH, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT), this);
Je ne suis pas vraiment un programmeur Java (c'est le cadre d'une cession), mais je ne vois rien du tout évidente.Quelqu'un peut plus intelligent que je vois quelque chose?
La solution
L' implements mouselistener, mousemotionlistener permet juste aux displayArea classe à écouter certains, pour être défini, Swing du composant événements de la souris.Vous devez définir explicitement ce qu'il devrait être à l'écoute.Donc, je suppose que vous pourriez ajouter quelque chose comme cela pour le constructeur:
this.addMouseListener(this);
this.addMouseMotionListener(this);
Autres conseils
Je ne vois pas de n'importe où dans le code où vous appelez addMouseListener(this) ou addMouseMotionListener(ce) pour la DisplayArea pour vous abonner à ces événements.
Je ne vois pas de code ici pour vous inscrire à la souris auditeurs.Vous devez appeler addMouseListener(this) et addMouseMotionListener(ce) sur la DisplayArea.