Pregunta

Entonces tengo un JPanel implementar MouseListener y 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;
}

El problema es que nunca se llama a ninguna de estas funciones del mouse. DisplayArea se crea así:

da = new DisplayArea(new Rectangle(CONTROL_WIDTH, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT), this);

Realmente no soy un programador de Java (esto es parte de una tarea), pero no veo nada evidente.¿Alguien más inteligente que yo puede ver algo?

¿Fue útil?

Solución

El implementa mouselistener, mousemotionlistener simplemente permite que la clase displayArea escuche algunos eventos del mouse del componente Swing, por definir.Tienes que definir explícitamente qué debería estar escuchando.Entonces supongo que podrías agregar algo como esto al constructor:

this.addMouseListener(this);
this.addMouseMotionListener(this);

Otros consejos

No veo en ninguna parte del código donde llame a addMouseListener(this) o addMouseMotionListener(this) para DisplayArea para que se suscriba a esos eventos.

No veo ningún código aquí para registrarme en los oyentes del mouse.Tienes que llamar a addMouseListener(this) y addMouseMotionListener(this) en DisplayArea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top