Domanda

Così ho ottenuto un JPanel l'attuazione di MouseListener e 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;
}

Il problema è che nessuna di queste funzioni di mouse sono mai chiamato. DisplayArea si crea così:

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

Io non sono davvero un programmatore Java (questo fa parte di un'assegnazione), ma non riesco a vedere nulla di evidente.E ' possibile che qualcuno più intelligente di me a vedere nulla?

È stato utile?

Soluzione

Il implements mouselistener, mousemotionlistener permette la displayArea classe per ascoltare, per essere definito, Swing componente degli eventi del mouse.È necessario definire in modo esplicito che cosa si dovrebbe essere in ascolto a.Quindi suppongo che si potrebbe aggiungere qualcosa di simile per il costruttore:

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

Altri suggerimenti

Non riesco a vedere in qualsiasi punto del codice in cui si chiama addMouseListener(questo) o addMouseMotionListener(questo) per il DisplayArea per iscriversi a tali eventi.

Non vedo qui il codice per registrare il mouse listener.Devi chiamare addMouseListener(questo) e addMouseMotionListener(questo) sul DisplayArea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top