Utiliser un mouseClicked() dans un JPanel

[Fermé]
Signaler
Messages postés
1180
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
12 avril 2021
-
 ElexXVII -
Bonjour, comment utiliser un evenement souris comme mouseClick dans un JPanel. J'ai essayé :
public class Pan extends JPanel{
 ...
 ...
        ...
 public void paintComponent(Graphics g){
  super.paintComponent(g);
          ...
                 ...
                 ...
         super.addMouseListener(new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
              System.out.println(2);
              carre1.changerCouleur(g);
              carre1.setTaille(60/2+10, yfen/2, 60);
              carre1.dessine(g);
              
             }
         });
 }
      ...
             ...
             ...
 } 
}


Mais il n y a que le System.out.println(2) qui marche, les autres methodes non. Je comprend pas pourquoi. Pouvez vous m'aidez svp.
Les "..." representent des codes (très longs) pas intéressant necessaires de vous les montrer.
Merci

pense à ta vie et pense à l'eternité
A voir également:

2 réponses

Messages postés
210
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
3 juillet 2015
24
Bonjour,

Est-tu sûr que les autres ne fonctionnent pas ? Que font ces méthodes ?
As-tu pensais à rafraîchir ton affichage ?
Messages postés
8
Date d'inscription
lundi 7 septembre 2015
Statut
Membre
Dernière intervention
22 mars 2016

utilise le Repaint();
Bonjour,
Tu peux utiliser ces éléments depuis ta classe "Fenêtre" puis envoyer les positions x et y a ton Panneau, pour l'affichage :

Classe Fenêtre :
import java.awt.event.*;
import javax.swing.*;
public class Frame extends JFrame implements MouseListener //tu implémente MouseListener dans ta JFrame
{

        Panel pan = new Panel();
        {
                this.setTitle("Test");
                this.setSize(800, 500);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.addMouseListener(this);
                this.setContentPane(pan);
                this.setVisible(true);
                pan.repaint();
        }
        public void mouseReleased(MouseEvent e) {}
        public void mouseClicked(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mousePressed(MouseEvent e) //Lorsque tu clique avec ta                                   souris, le code suivant est executé
        {
                System.out.println("Pressed" + e.getX() + " - " + e.getY());
                pan.setX(e.getX());
                pan.setY(e.getY());//on appelle les méthodes setX et setY de ton Panel en leur envoyer les positions de la souris
        }
}


Panel :
import java.awt.*;
import javax.swing.*;

public class Panel extends JPanel
{
        int x = 0;
        int y = 0;//on déclare les variables x et y

        public void paintComponent(Graphics g)
 {
         // Affichage :
        g.fillOval(x, y, 10, 10);
        }
   
public void setX(int pX)
 {
         x = pX;
         this.repaint();
 }
 
 public void setY(int pY)
 {
         y = pY;
         this.repaint();
 }
}


PS : Les positions x et y pour l'affichage avec ton JPanel ne sont pas exactement les mêmes que celle recueilli via MousListener, il y'a qque pixel de décalage ( tu peux mettre :
g.fillOval(x-15, y-40, 10, 10);
pour régler le probleme ;).

En espérant t'avoir aider !