Evénement de souris dans un JPanel (Java)
Résolu/Fermé
csi_bern
Messages postés
64
Date d'inscription
lundi 29 mars 2010
Statut
Membre
Dernière intervention
26 octobre 2020
-
14 août 2010 à 15:20
Utilisateur anonyme - 19 août 2010 à 09:47
Utilisateur anonyme - 19 août 2010 à 09:47
A voir également:
- Evénement de souris dans un JPanel (Java)
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Comment débloquer la souris d'un ordinateur portable - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
- Java jre - Télécharger - Langages
4 réponses
Utilisateur anonyme
15 août 2010 à 22:27
15 août 2010 à 22:27
Re,
J'ai besoin de plus d'infos concernant tes 2 classes...
Avant tout, il serait mieux d'avoir des classes dont le nom commence par une majuscule.
-Est ce que public class Fenetre extends JFrame { est bien la classe 1 ?
-et public class PanImage extends JPanel { la classe 2
-Comment procèdes tu pour appeler la classe 2 depuis la classe 1 ?
-Tu dis "Il n'y aurait pas moyen d'insérer le listener directement dans la classe 2 ?" C'est ce que tu fais non?
-Il serait bien que tu nous donnes plus de code (surtout concernant la classe 2)
Merci...
Dan
J'ai besoin de plus d'infos concernant tes 2 classes...
Avant tout, il serait mieux d'avoir des classes dont le nom commence par une majuscule.
-Est ce que public class Fenetre extends JFrame { est bien la classe 1 ?
-et public class PanImage extends JPanel { la classe 2
-Comment procèdes tu pour appeler la classe 2 depuis la classe 1 ?
-Tu dis "Il n'y aurait pas moyen d'insérer le listener directement dans la classe 2 ?" C'est ce que tu fais non?
-Il serait bien que tu nous donnes plus de code (surtout concernant la classe 2)
Merci...
Dan
csi_bern
Messages postés
64
Date d'inscription
lundi 29 mars 2010
Statut
Membre
Dernière intervention
26 octobre 2020
2
15 août 2010 à 07:45
15 août 2010 à 07:45
Salut Dan,
Merci pour ta réponse. Malheureusement, quand j'appèle ma classe (classe 2) depuis une autre (classe 1), le système de clique ne marche pas.
Je peux cependant mettre dans la classe 1 un listener sur la classe 2, mais à force je vais "surcharger" ma classe 1. Il n'y aurait pas moyen d'insérer le listener directement dans la classe 2 ?
Merci pour ta réponse. Malheureusement, quand j'appèle ma classe (classe 2) depuis une autre (classe 1), le système de clique ne marche pas.
Je peux cependant mettre dans la classe 1 un listener sur la classe 2, mais à force je vais "surcharger" ma classe 1. Il n'y aurait pas moyen d'insérer le listener directement dans la classe 2 ?
csi_bern
Messages postés
64
Date d'inscription
lundi 29 mars 2010
Statut
Membre
Dernière intervention
26 octobre 2020
2
16 août 2010 à 07:40
16 août 2010 à 07:40
Salut Dan,
Merci de tes réponses. Pour moi c'est encore un peu dur le Java, je viens de m'y mettre.
Tout d'abord concernant le nom des classes tu as raison, c'est une erreur de ma part. Ensuite, Fenetre est bien la classe 1 et PanImage la classe 2. Pour appeler la classe 2, je fais dans la déclaration des variables un "private PanImage panGauche = new PanImage()," (je fais de même avec une deuxième variable appelée panDroit). Ensuite, je fais un "panPrinc.add(panGauche, null);" (panPrinc étant un JPanel en setLayout(null)). panGauch est positionné dans le panPrinc par un setBounds.
En fait, je disais que le listener de la classe 2 ne fonctionnait pas, en tout cas depuis la classe 1. Et c'est bien ça le problème. Je t'enverrais bien mes codes en entier, mais ils commencent à devenir conséquent. En plus, je les ai bien modifiés depuis mon dernier post afin d'utiliser un listener sur la classe 2 dans la classe 1 (j'espère que c'est compréhensible). Donc dans la classe 1, j'ai fait "panGauche.addMouseListener(...);".
Bon si jamais ça te prend pas trop de temps, merci de me renseigner. J'aimerais bien réussir à faire cela, ça allégerait nettement mon code et le rendrait plus facile à comprendre. Mais bon, pour l'instant ça fonctionne et c'est bien là le principal. Si jamais, je pourrais t'envoyer les sources par mail
Merci de tes réponses. Pour moi c'est encore un peu dur le Java, je viens de m'y mettre.
Tout d'abord concernant le nom des classes tu as raison, c'est une erreur de ma part. Ensuite, Fenetre est bien la classe 1 et PanImage la classe 2. Pour appeler la classe 2, je fais dans la déclaration des variables un "private PanImage panGauche = new PanImage()," (je fais de même avec une deuxième variable appelée panDroit). Ensuite, je fais un "panPrinc.add(panGauche, null);" (panPrinc étant un JPanel en setLayout(null)). panGauch est positionné dans le panPrinc par un setBounds.
En fait, je disais que le listener de la classe 2 ne fonctionnait pas, en tout cas depuis la classe 1. Et c'est bien ça le problème. Je t'enverrais bien mes codes en entier, mais ils commencent à devenir conséquent. En plus, je les ai bien modifiés depuis mon dernier post afin d'utiliser un listener sur la classe 2 dans la classe 1 (j'espère que c'est compréhensible). Donc dans la classe 1, j'ai fait "panGauche.addMouseListener(...);".
Bon si jamais ça te prend pas trop de temps, merci de me renseigner. J'aimerais bien réussir à faire cela, ça allégerait nettement mon code et le rendrait plus facile à comprendre. Mais bon, pour l'instant ça fonctionne et c'est bien là le principal. Si jamais, je pourrais t'envoyer les sources par mail
csi_bern
Messages postés
64
Date d'inscription
lundi 29 mars 2010
Statut
Membre
Dernière intervention
26 octobre 2020
2
Modifié par csi_bern le 17/08/2010 à 08:39
Modifié par csi_bern le 17/08/2010 à 08:39
Salut Dan,
Je dois faire quelque chose qui ressemble au code que tu m'as envoyé.
Dans la classe 2, j'affiche tous les points qui ont été cliqués (ceux-ci sont inscrits dans un ArrayList).
Dans la classe 1, j'insère 2 objets de la classe 2. Ainsi, c'est quand je clique dans un de ces objets que le nouveau point doit s'afficher à l'endroit du clique et en plus des points précédents.
J'ai réussi à réaliser cela, tout focntionne, le seul problème, c'est que je n'arrive pas à comprendre pourquoi le "this.addMouseListener(new MouseAdapter() " dans la classe 2 ne fonctionne pas.
En fait, en revoyant mon code (plusieurs jours après et à tête reposée), je me demande si cela ne vient pas du fait que j'ai mis un void dans mon constructeur de la deuxième classe et qu'il a une majuscule de différence (que tu m'avais déjà signalée auparavant) : "public void PanImage()".
Malheureusement, j'ai oublié mon ordi aujourd'hui, je ne pourrai pas tester avant ce soir. S'il ne s'agit que de ça, je te redirai.
Merci en tout cas encore une fois pour le temps passé à mon problème
Je dois faire quelque chose qui ressemble au code que tu m'as envoyé.
Dans la classe 2, j'affiche tous les points qui ont été cliqués (ceux-ci sont inscrits dans un ArrayList).
Dans la classe 1, j'insère 2 objets de la classe 2. Ainsi, c'est quand je clique dans un de ces objets que le nouveau point doit s'afficher à l'endroit du clique et en plus des points précédents.
J'ai réussi à réaliser cela, tout focntionne, le seul problème, c'est que je n'arrive pas à comprendre pourquoi le "this.addMouseListener(new MouseAdapter() " dans la classe 2 ne fonctionne pas.
En fait, en revoyant mon code (plusieurs jours après et à tête reposée), je me demande si cela ne vient pas du fait que j'ai mis un void dans mon constructeur de la deuxième classe et qu'il a une majuscule de différence (que tu m'avais déjà signalée auparavant) : "public void PanImage()".
Malheureusement, j'ai oublié mon ordi aujourd'hui, je ne pourrai pas tester avant ce soir. S'il ne s'agit que de ça, je te redirai.
Merci en tout cas encore une fois pour le temps passé à mon problème
csi_bern
Messages postés
64
Date d'inscription
lundi 29 mars 2010
Statut
Membre
Dernière intervention
26 octobre 2020
2
19 août 2010 à 08:21
19 août 2010 à 08:21
Salut,
En fait si, le problème venait du constructeur car ça fonctionne maintenant. Si ce n'est pas forcément de void, ça devait venir que j'avais une majuscule de différence entre la classe et le constructeur.
C'est ce genre de petites erreurs que tu ne remarques pas qui me font détester la programmation parfois !
En fait si, le problème venait du constructeur car ça fonctionne maintenant. Si ce n'est pas forcément de void, ça devait venir que j'avais une majuscule de différence entre la classe et le constructeur.
C'est ce genre de petites erreurs que tu ne remarques pas qui me font détester la programmation parfois !
Utilisateur anonyme
14 août 2010 à 20:27
14 août 2010 à 20:27
Salut,
Je te propose cette petite classe (qui est un extrait d'un de mes programmes) et qui montre comment obtenir les coordonnées d'un clic.
Cordialement,
Dan
Je te propose cette petite classe (qui est un extrait d'un de mes programmes) et qui montre comment obtenir les coordonnées d'un clic.
import javax.swing.*; import java.awt.*; // dont Toolkit et Graphics import java.awt.event.*; public class CoordonneesDeClic extends JFrame { //private Image img; private Color jauneclair = new Color(255, 255, 212); private int x, y; private int x1, y1; // pour ... (pas encore utilisé) private int xClic, yClic; private boolean clic = false; private static Font font10; public CoordonneesDeClic() { super("Cliquer dans le cadre pour obtenir les coordonnees du clic sur la console."); // titre setSize(538, 770); // dimensions frame (redimensionnable par défaut) setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); addMouseListener(new Moustener()); } public void paint(Graphics g) { //Graphique des coordonees: super.paint(g);Polygon rectangle2 = new Polygon(); // rectangle noir rectangle2.addPoint(xClic -20, yClic -12); // point haut gauche rectangle2.addPoint(xClic +22, yClic -12); // point haut droite rectangle2.addPoint(xClic +22, yClic +14); // point bas droite rectangle2.addPoint(xClic -20, yClic +14); // point bas gauche g.setColor(Color.black); // fond du rectangle g.fillPolygon(rectangle2); // remplissage g.drawPolygon(rectangle2); // affichage // dessin du graphique des coordonnées (en blanc) g.setFont(font10); g.setColor(Color.white); g.drawString(Integer.toString(yClic), xClic -19, yClic +4); // val. y du clique g.drawString(Integer.toString(xClic), xClic -3, yClic -4); // val. x du clique // flecheAbscisses (x) sans la pointe g.drawLine(xClic -2, yClic -1, xClic +18, yClic -1); // points x, y gauche... et droite // pointe de cette fleche g.drawLine(xClic +16, yClic -3, xClic +22, yClic -1); // points x, y gauche... et droite \ g.drawLine(xClic +16, yClic +2, xClic +22, yClic -1); // points x, y gauche... et droite / // flecheOrdonnées (y) sans la pointe g.drawLine(xClic, yClic -3, xClic, yClic +9); // points x, y haut... et bas // pointe de cette fleche g.drawLine(xClic -2, yClic +6, xClic, yClic +12); // points x, y haut... et bas \ g.drawLine(xClic +2, yClic +6, xClic, yClic +12); // points x, y haut... et bas / } public static void main(String[] args) { font10 = new Font("SansSerif", Font.BOLD, 10); new CoordonneesDeClic(); } private class Moustener extends MouseAdapter { public void mouseClicked(MouseEvent evt) { clic = true; /*System.out.println("\nL 3260 mouseClicked(MouseEvent evt)\n" + " " + "w/h clic/cliquéEn/trueFalse[icop]/fig :\n" + " " + w + "/" + h + " " + clic + "/" + cliquéEn + "/" + trueFalse[icop] + "/" + fig); */ xClic = evt.getX(); yClic = evt.getY(); System.out.println("L 40 xClic/yClic: "+ xClic + "/" + yClic); repaint(); // pour afficher le graphique des coordonnées } } }
Cordialement,
Dan