Мой (Java / Swing) MouseListener не слушает, помогите разобраться почему - PullRequest
6 голосов
/ 29 августа 2008

Итак, у меня есть JPanel, реализующий MouseListener и 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;
}

Проблема в том, что ни одна из этих функций мыши никогда не вызывается. DisplayArea создается так:

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

Я не программист на Java (это часть задания), но я не вижу ничего очевидного. Может ли кто-нибудь умнее меня увидеть что-нибудь?

Ответы [ 3 ]

13 голосов
/ 29 августа 2008

реализует mouselistener, mousemotionlistener просто позволяет классу displayArea прослушивать некоторые, для определения, события мыши компонента Swing. Вы должны четко определить, что он должен слушать. Итак, я полагаю, вы можете добавить что-то вроде этого в конструктор:

this.addMouseListener(this);
this.addMouseMotionListener(this);
3 голосов
/ 29 августа 2008

Я не вижу здесь никакого кода для регистрации слушателей мыши. Вы должны вызвать addMouseListener (this) и addMouseMotionListener (this) в DisplayArea.

3 голосов
/ 29 августа 2008

Я не вижу нигде в коде, где вы вызываете addMouseListener (this) или addMouseMotionListener (this) для DisplayArea, чтобы он подписывался на эти события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...