Utiliser un mouseClicked() dans un JPanel

Fermé
kabrice01 Messages postés 1180 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 12 avril 2021 - Modifié par kabrice01 le 27/05/2015 à 07:34
 ElexXVII - 12 sept. 2015 à 12:38
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

nephou Messages postés 210 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 3 juillet 2015 22
28 mai 2015 à 12:18
Bonjour,

Est-tu sûr que les autres ne fonctionnent pas ? Que font ces méthodes ?
As-tu pensais à rafraîchir ton affichage ?
0
Leostingher Messages postés 8 Date d'inscription lundi 7 septembre 2015 Statut Membre Dernière intervention 22 mars 2016
7 sept. 2015 à 17:16
utilise le Repaint();
0
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 !
0