2010-09-20 4 views
0

J'ai plusieurs JPanels sur mon application, mais je ne peux pas comprendre comment détecter exactement celui qui a été cliqué.J'ai besoin de plusieurs JPanel pour répondre à ses propres événements de clic de souris

Dans mon MouseListener, j'ai l'argument e mais ma méthode ne fonctionne pas

Au début de mon code, je déclare plusieurs JPanels et un objet d'écoute.


PuzzleListener plist = new PuzzleListener(); 
JPanel puzzle_board = new JPanel(new GridLayout(4,4,5,5)); 
... 
Square square1 = new Square("1"); 
Square square2 = new Square("2"); 
... 
puzzle_board.add(square1); 
puzzle_board.add(square2); 
... 
square1.addMouseListener(plist); 
square1.addMouseListener(plist);

class PuzzleListener implements MouseListener {

public void mouseClicked(MouseEvent e) { JPanel pnlClick = (JPanel)(e.getSource()); //System.out.println(pnlClick); //System.out.println(e.getSource()); //System.out.println(e.getComponent().getClass()); //System.out.println(e.getComponent().getClass().getName()); //problem is here if(pnlClick == square1) { System.out.println("Panel 1 has been clicked"); } if(pnlClick == square2) { System.out.println("Panel 2 has been clicked"); } } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { //System.out.println("Panel 1 has been clicked"); } public void mouseReleased(MouseEvent e) { } public void mousePressed(MouseEvent e) { } /* public void actionPerformed(ActionEvent e) { JPanel pnlClick = (JPanel)(e.getSource()); }*/ }//end calcListener
+0

J'ai complètement oublié d'accepter mes réponses précédentes =) Merci pour le rappel. –

Répondre

1

Le problème semble être que vous avez une variable de classe et une variable locale pour chacun de vos panneaux carrés.

Square square1 = new Square("1"); 

devrait être:

square1 = new Square("1"); 

maintenant vous n'aurez une variable de classe qui l'PuzzleListener peut faire référence.

+0

Très apprécié !!! Leçon utile apprise. –

0

Faut-il utiliser un seul MouseListener? Vous pouvez créer une nouvelle instance de votre PuzzleListener et l'ajouter à chaque JPanel. De cette façon, il n'y a pas de confusion quant à savoir quel écouteur sur quel panneau est déclenché.

+0

Ceci est une version raccourcie de mon code, j'ai actuellement 16 JPanels sur 1 JFrame. Cela semble étrange, mais ce sont les exigences du projet. –

Questions connexes