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.
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);
}
}
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é.
Vous pouvez étendre MouseAdapter à la place, et simplement remplacer les événements qui vous intéressent vraiment.
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);
}
}
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);
}
}
Vous pouvez hériter de Java.awt.event.MouseAdapter
et remplacer uniquement les méthodes des événements qui vous intéressent.