Afficher le numero du triangle lorsque je clique à l'interieur du triangle

sos59 - 7 mai 2013 à 13:54
 sos59 - 31 mai 2013 à 10:31
Bonjour,

j'ai developpé un maillage c'est à dire un ensemble de triangles à partir d'une applet.
Je souhaiterais lorsque je clique par exemple à l'interieur du triangle 1 qu'on m'affiche " c'est le triangle n'1".
Le probleme est que puisque c'est un maillage les triangles sont collées et j'ai essayé de faire des boucles if avec les coordonnées mais lorsque je clique sur le triangle 2 sa m'affiche " c'est le triangle n'1".


Cordialement,

11 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
7 mai 2013 à 14:09
Salut,

Comment as tu créé tes triangles ? A l'aide de la méthode paint ou bien tu as utilisé des panels différents ?
0
J'ai tracé mes triangles a l'aide de la méthode paint avec un g.drawPolygon(x,y,18). x et y sont des tableaux ou sont stockées les coordonnées( int [] x = { .....} et int [] y = { ...}).
J'ai essayer de faire une boucle if mais lorsque je clique à l'exterieur du triangle 1, la boucle if est toujours executée.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mai 2013 à 09:54
Ce serait plus simple de définir un triangle dans un JPanel en redéfinissant la méthode paint. Ensuite, tu redéfinis la méthode contains(x, y) pour exclure les points qui ne sont pas dans le triangle, tu ajoutes le listener et tu colles tout tes petits triangles dans un JPanel avec un GridLayout.

Là, tu vas être obligé de récupérer les coordonnées du clic et de faire des savants calculs pour savoir quel triangle a été cliqué...
0
Merci pour ton aide, mais je ne sais pas comment faire cela dans un JPanel et mais je vais y jeter un coup d'oeil ainsi que pour la methode contains. Mais tu n'aurais pas un petit exemple de vue pour voir a quoi cela ressemble.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mai 2013 à 16:04
Je te ferai un petit exemple demain matin, tout ne sera pas fait mais tu auras le début, relance moi si je ne t'ai rien donné avant midi, c'est que j'ai oublié ^^
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 mai 2013 à 08:26
Et voilà l'exemple

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Triangle extends JPanel {

private static final long serialVersionUID = 3380574540699301697L;
private int taille=60;

public Triangle(final int i){
addMouseListener(new MouseListener() {

@Override
public void mouseReleased(MouseEvent e) {
System.out.println(i);
}

@Override
public void mousePressed(MouseEvent e) {}

@Override
public void mouseExited(MouseEvent e) {}

@Override
public void mouseEntered(MouseEvent e) {	}

@Override
public void mouseClicked(MouseEvent e) {}
});
}

@Override
public boolean contains(int x, int y){
//Là, il faut dire quel point (x, y) est dans le triangle
return super.contains(x, y);
}

@Override
public boolean contains(Point p){
return contains((int)p.getX(), (int)p.getY());
}

@Override
public void paintComponent(Graphics g){
g.setColor(Color.BLUE);
g.drawLine(0, taille, taille, taille);
g.drawLine(taille, taille, taille/2, 0);
g.drawLine(0, taille, taille/2, 0);
}

public static void main(String[] args){
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(60*5, 60*5+40);
f.setLayout(new GridLayout(5, 5));
for(int i=0; i<25; i++){
f.add(new Triangle(i));
}
f.setLocationRelativeTo(null);
f.setVisible(true);
}

}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 mai 2013 à 08:27
Je ne pense pas que ce soit exactement ce que tu souhaites faire mais ca ne doit pas en être très éloigné.

Bon courage.
0
Je te remercie pour ton aide, mais il y a une faute lorsque je fais java Triangle.java qui m'affiche :

Exception in thread "main" java.lang.UnsupportedClassVersionError: Triangle : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Triangle. Program will exit.

Je ne trouve pa l'erreur car le main est bon
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
15 mai 2013 à 08:46
Ru utilises quelle version de java ?
0
désolé du retard, j'utilises jdk 7 comme version de java
0
j'utilise jdk 7
0
Rejoignez-nous