2008-08-29 14 views
6

así que tengo un JPanel implementar MouseListener y MouseMotionListener:(Java/Swing) MouseListener no está escuchando, me ayudará a entender por qué

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; 
} 

El problema es que ninguna de estas funciones del ratón son cada vez llamado. DisplayArea se crea de esta manera:

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

no soy realmente un programador de Java (esto es parte de una misión), pero no puedo ver nada salta a la vista. ¿Alguien puede ser más inteligente de lo que veo?

Respuesta

13

El implementa mouselistener, mousemotionlistener solo permite que la clase displayArea escuche algunos, por definir, los eventos del mouse del componente Swing. Tienes que definir explícitamente a qué debería estar escuchando. Así que supongo que se podría añadir algo como esto al constructor:

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

no veo en cualquier parte del código en el que llama a addMouseListener (este) o addMouseMotionListener (este) para el DisplayArea a fin de que para suscribirse a esos eventos.

3

No veo ningún código aquí para registrar a los oyentes del mouse. Debe llamar a addMouseListener (this) y addMouseMotionListener (this) en DisplayArea.

Cuestiones relacionadas