web-dev-qa-db-fra.com

Java MouseListener

J'ai un tas de JLabels et je voudrais piéger les événements de clic de souris. en ce moment je dois utiliser:

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!"); 
}

Je me demandais s'il y avait une façon plus ordonnée de le faire au lieu d'avoir un tas d'événements que je ne souhaite pas piéger?

ÉDITER:

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

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

ce qui précède fonctionne mais netBeans dit d'ajouter une annotation @override. Qu'est-ce que ça veut dire?

EDIT: ok je l'ai. fixe et résolu.

13
iTEgg

Utilisez MouseAdapter()

Une classe d'adaptateur abstraite pour recevoir des événements de souris. Les méthodes de cette classe sont vides. Cette classe existe comme commodité pour créer des objets écouteurs. Vous devez donc implémenter uniquement la méthode que vous aimez, comme l'exemple suivant:

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);
  }
}
24
ring bearer

On pourrait utiliser une classe MouseAdapter , qui implémente l'interface MouseListener , donc on n'a pas besoin d'implémenter toutes les méthodes.

Cependant, en remplaçant les méthodes d'intérêt, on peut obtenir le comportement souhaité. Par exemple, si l'on remplace la méthode mouseClicked, alors on peut définir un comportement pour l'événement de clic de souris.

Par exemple (code non testé):

JLabel label = new JLabel("Hello");

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

Dans le code ci-dessus, le JLabel affichera "Clicked! "sur la console après avoir été cliqué.

8
coobird

Vous pouvez étendre MouseAdapter à la place, et simplement remplacer les événements qui vous intéressent vraiment.

5
Bill the Lizard
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);
    }
}
2
Ponmari Subramanian

un exemple d'événement de souris cliqué,

de la même manière, vous pouvez utiliser mousePressed ou d'autres événements de souris

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




}
1
Arthur Tsidkilov

Vous pouvez hériter de Java.awt.event.MouseAdapter et remplacer uniquement les méthodes des événements qui vous intéressent.

1
jarnbjo