6 Stimmen

Mein (Java/Swing) MouseListener hört nicht, helfen Sie mir herauszufinden, warum

Ich habe also eine JPanel Implementierung 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;
}

Das Problem ist, dass keine dieser Mausfunktionen jemals aufgerufen wird. DisplayArea wird auf diese Weise erstellt:

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

Ich bin kein wirklicher Java-Programmierer (dies ist Teil einer Hausarbeit), aber ich kann nichts Offensichtliches erkennen. Kann jemand, der schlauer ist als ich, etwas erkennen?

13voto

Shabaz Punkte 843

El implementiert Mouselistener, Mousemotionlistener erlaubt es der displayArea-Klasse lediglich, auf einige noch zu definierende Mausereignisse der Swing-Komponente zu hören. Sie müssen explizit definieren, worauf sie hören soll. Ich nehme an, Sie könnten etwas wie das Folgende in den Konstruktor einfügen:

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

3voto

Neal Punkte 6203

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

3voto

Paul Tomblin Punkte 172816

Ich sehe hier keinen Code, der sich bei den Mauszuhörern registriert. Sie müssen addMouseListener(this) und addMouseMotionListener(this) auf der DisplayArea aufrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X