2010-04-19 22 views
13

Tengo un montón de JLabels y me gustaría atrapar los eventos de clic del mouse. en el momento que estoy teniendo de usar:Java MouseListener

public void mouseClicked(MouseEvent arg0) { 

} 

public void mouseExited(MouseEvent arg0) { 

} 

public void mouseEntered(MouseEvent arg0) { 

} 

public void mousePressed(MouseEvent arg0) { 

} 

public void mouseReleased(MouseEvent arg0) { 

    System.out.println("Welcome to Java Programming!"); 
} 

Me preguntaba si hay una manera más ordenada de hacer esto en vez de tener un montón de eventos que no quiero trampa?

EDIT:

class MyAdapter extends MouseAdapter { 
    public void mouseClicked(MouseEvent event) { 

     System.out.println(event.getComponent()); 
    } 
} 

lo anterior funciona, pero netBeans dice añadir anotation @ Override. ¿Qué significa esto?

EDITAR: ok lo consiguió. arreglado y resuelto

Respuesta

20

Uso MouseAdapter()

Una clase abstracta adaptador para recibir eventos de ratón. Los métodos en esta clase están vacíos. Esta clase existe como una conveniencia para crear objetos de escucha. Así que hay que aplicar sólo el método te gusta como ejemplo siguiente:.

import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class MainClass extends JPanel { 

    public MainClass() { 

     addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent me) { 
      System.out.println(me); 
      } 
     }); 

    } 

    public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.getContentPane().add(new MainClass()); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.setSize(200, 200); 
    frame.setVisible(true); 
    } 
} 
+0

gracias. siento tener que preguntar esto, pero estoy comenzando con java. Me preguntaba cómo implementar MouseAdapter por separado para que el código no esté en línea. No puedo extenderme ya que estoy extendiendo JFrame. – iTEgg

+1

Se puede crear una clase separada decir, 'MyMouseListener'as: ' myMouseListener clase pública se extiende MouseAdapter() {public void mosuePressed (MouseEvent mí) {// lo que desea que suceda }} ' y luego agregue eso como escucha de mouse en su código de UI como: addMouseListener (new MyMouseListener()); Ahora, una forma de hacer que sus elementos de UI estén disponibles para su recién implementado 'MyMouseListener' es mediante parámetros de constructor. Si quieres detalles/código, házmelo saber. –

+0

eso es genial. He hecho exactamente lo que dijiste y ahora tengo esta funcionalidad. gracias. – iTEgg

5

Puede extender MouseAdapter lugar, y simplemente anular los eventos a los que está realmente interesado en.

7

Se podría utilizar una clase MouseAdapter, que implementa la interfaz MouseListener, por lo que no se necesita para poner en práctica todos los métodos.

Sin embargo, al anular los métodos de interés, uno puede obtener el comportamiento deseado. Por ejemplo, si se reemplaza el método mouseClicked, se puede definir algún comportamiento para el evento de clic del mouse.

Por ejemplo (código no probado):

JLabel label = new JLabel("Hello"); 

label.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
     System.out.println("Clicked!"); 
    } 
}); 

En el código anterior, la JLabel imprimirá "Clicked!" a la consola al ser pulsado.

+3

+1 Mouse Adapter existe exactamente para esto. – OscarRyz

1

Usted puede heredar de java.awt.event.MouseAdapter y sólo reemplazar los métodos para el evento (s) que usted está interesado en

1

algunos ejemplos del evento de ratón se hace clic,

de la misma manera se puede utilizar mousePressed u otros eventos de ratón

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Work1 extends JFrame{ 

    private JPanel panelNew; 

    public Work1(){ 
     super("Work 1"); 


     // create Panel 
     panelNew = new JPanel(); 
     panelNew.setLayout(null); 
     panelNew.setBackground(Color.cyan); 
     add(panelNew); 

     // create Button 
     JButton btn = new JButton("click me"); 
     // position and size of a button 
     btn.setBounds(100, 50, 150, 30); 

     panelNew.add(btn); 


     // add event to button 
     btn.addMouseListener(new MouseAdapter() { 
       public void mouseClicked(MouseEvent me) { 

        // change text of button after click 

        if (btn.getText() == "abraCadabra"){ 
          btn.setText("click me again") ; 
        } 
        else btn.setText("abraCadabra"); 
       } 
     });   
    } 




    public static void main(String[] args){ 
     Work1 go1 = new Work1(); 
     go1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     go1.setSize(320,200); 
     go1.setVisible(true); 
    } 




} 
2
public class MouseEventDemo ... implements MouseListener { 
     //where initialization occurs: 
     //Register for mouse events on blankArea and the panel. 
     blankArea.addMouseListener(this); 
     addMouseListener(this); 
    ... 

    public void mousePressed(MouseEvent e) { 
     saySomething("Mouse pressed; # of clicks: " 
        + e.getClickCount(), e); 
    } 

    public void mouseReleased(MouseEvent e) { 
     saySomething("Mouse released; # of clicks: " 
        + e.getClickCount(), e); 
    } 

    public void mouseEntered(MouseEvent e) { 
     saySomething("Mouse entered", e); 
    } 

    public void mouseExited(MouseEvent e) { 
     saySomething("Mouse exited", e); 
    } 

    public void mouseClicked(MouseEvent e) { 
     saySomething("Mouse clicked (# of clicks: " 
        + e.getClickCount() + ")", e); 
    } 

    void saySomething(String eventDescription, MouseEvent e) { 
     textArea.append(eventDescription + " detected on " 
         + e.getComponent().getClass().getName() 
         + "." + newline); 
    } 
} 
+0

Solo un copiar y pegar de la guía oficial del oráculo, tampoco responde la pregunta – Adrijaned

Cuestiones relacionadas