2010-04-19 16 views
13

J'ai un tas de JLabels et je voudrais piéger les événements de clic de souris. au moment où j'ai à utiliser: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!"); 
} 

Je me demandais s'il y a un moyen plus net de le faire au lieu d'avoir un tas d'événements que je ne veux pas piège?

EDIT:

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

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

les travaux ci-dessus, mais NetBeans dit ajouter @Override anotation. Qu'est-ce que ça veut dire?

EDIT: bien reçu. fixe et résolu.

Répondre

20

Utilisez MouseAdapter()

Une classe d'adaptateur abstrait pour recevoir des événements de souris. Les méthodes de cette classe sont vides. Cette classe existe pour faciliter la création d'objets écouteurs. Vous avez donc besoin de mettre en œuvre que la méthode comme par exemple 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); 
    } 
} 
+0

merci. Je suis désolé de demander cela mais je commence juste avec Java. Je me demandais comment implémenter MouseAdapter séparément pour que le code ne soit pas en ligne? je ne peux pas étendre comme im déjà étendre JFrame. – iTEgg

+1

Vous pouvez créer une catégorie distincte dire, 'MyMouseListener'as: ' myMouseListener public class MouseAdapter() { publique vide mosuePressed (MouseEvent moi) {// tout ce que vous voulez arriver }} ' et Ajoutez-le ensuite en tant qu'écoute de la souris dans votre code d'interface utilisateur: addMouseListener (new MyMouseListener()); Maintenant, une façon de rendre vos éléments d'interface utilisateur disponibles pour votre 'MyMouseListener' nouvellement implémentée est via les paramètres du constructeur. Si vous voulez des détails/code, faites le moi savoir. –

+0

c'est génial. J'ai fait exactement ce que vous avez dit et j'ai cette fonctionnalité maintenant. Je vous remercie. – iTEgg

5

Vous pouvez étendre MouseAdapter à la place, et juste remplacer les événements auxquels vous êtes vraiment intéressé.

7

On pourrait utiliser une classe MouseAdapter, qui implémente l'interface MouseListener, donc on n'a pas besoin de mettre en œuvre 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, on peut définir un comportement pour l'événement de clic de la 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 imprimera "Clicked!" à la console après avoir été cliqué.

+3

+1 L'adaptateur de souris existe exactement pour cela. – OscarRyz

1

Vous pouvez hériter de java.awt.event.MouseAdapter et seulement remplacer les méthodes de l'événement (s) vous êtes intéressé par

1

quelques exemples de l'événement de la souris cliqué,

de la même manière que 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); 
    } 




} 
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

Juste un copier-coller du guide officiel d'Oracle, ne répond pas non plus à la question – Adrijaned