Frage

Also ich habe eine JPanel umsetzen MouseListener Und 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;
}

Das Problem ist, dass keine dieser Mausfunktionen jemals aufgerufen wird. DisplayArea entsteht so:

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

Ich bin nicht wirklich ein Java-Programmierer (das ist Teil einer Aufgabe), aber ich kann nichts offensichtliches erkennen.Kann jemand, der schlauer ist als ich, etwas sehen?

War es hilfreich?

Lösung

Der implementiert Mouselistener, Mousemotionlistener Ermöglicht der displayArea-Klasse lediglich, einige zu definierende Mausereignisse der Swing-Komponente abzuhören.Sie müssen explizit definieren, was überwacht werden soll.Ich nehme an, Sie könnten dem Konstruktor so etwas hinzufügen:

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

Andere Tipps

Ich sehe nirgendwo im Code, wo Sie addMouseListener(this) oder addMouseMotionListener(this) für die DisplayArea aufrufen, damit sie diese Ereignisse abonniert.

Ich sehe hier keinen Code, um mich bei den Maus-Listenern zu registrieren.Sie müssen addMouseListener(this) und addMouseMotionListener(this) für die DisplayArea aufrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top