Meu (Java / Swing) MouseListener não está escutando, me ajudar a descobrir por que

votos
6

Então eu tenho uma JPanelimplementação MouseListenere 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;
}

O problema é que nenhuma dessas funções do mouse são sempre chamado. DisplayAreaé criado assim:

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

Eu não sou realmente um programador Java (isto é parte de uma atribuição), mas eu não consigo ver nada muito óbvio. Pode alguém mais esperto do que eu ver alguma coisa?

Publicado 29/08/2008 em 01:37
fonte usuário
Em outras línguas...                            


3 respostas

votos
13

O MouseListener implementos, MouseMotionListener apenas permite que a classe displayArea para ouvir alguns, a ser definido, eventos de mouse do componente Swing. Você tem que definir explicitamente o que deveria estar ouvindo a. Então, eu suponho que você poderia adicionar algo como isso para o construtor:

this.addMouseListener(this);
this.addMouseMotionListener(this);
Respondeu 29/08/2008 em 01:42
fonte usuário

votos
3

Não vejo qualquer código aqui para se inscrever para os ouvintes de mouse. Você tem que chamar addMouseListener (this) e addMouseMotionListener (this) no displayArea.

Respondeu 29/08/2008 em 01:43
fonte usuário

votos
3

Eu não vejo qualquer lugar no código onde você chamar addMouseListener (this) ou addMouseMotionListener (this) para o displayArea para que ele se inscrever para esses eventos.

Respondeu 29/08/2008 em 01:42
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more