Accueil > > > GRILLE HEXAGONALE
GRILLE HEXAGONALE
Information sur la source
Description
Ce code affiche une grille hexagonale à l'écran.(300*300) Lorsque l'on clique sur un hexagone, il donne son numéro.(numéro calculé en fonction de la ligne et de la colonne) Lorsqu'un hexagone est survolé, il est mit en rouge et en gras. Cette petite application utilise java2d. Il est possible de modifier la taille du côté du polygone en changeant la variable de la valeur "cote". pol contient le dernier polygone survolé.
Source
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Point;
- import java.awt.Polygon;
- import java.awt.Rectangle;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseMotionListener;
-
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
-
- /*
- * Cette classe permet d'utiliser une grille d'hexagone
- * C'est très très lent puisque chaque segment est redessiné 2 fois !
- */
-
- public class Main {
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- JFrame win=new JFrame(); // Crée la fenetre principale
- JPanel jp=(JPanel) win.getContentPane(); // Récupère le conteneur de la fenêtre
- final AffGrille jp2=new AffGrille(); // Crée une instance de la classe privée AffGrille
- jp2.addMouseMotionListener(new MouseMotionListener(){
- Polygon p;
- @Override
- public void mouseDragged(MouseEvent arg0) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void mouseMoved(MouseEvent arg0) {
- p=jp2.pol;
- if(!p.contains(arg0.getPoint())){
- jp2.repaint();
- }
- }
-
-
- });// Repeind jp2 lorsque la souris se déplace
- jp2.addMouseListener(new MouseAdapter(){
-
- @Override
- public void mouseClicked(MouseEvent arg0) {
- super.mouseClicked(arg0);
- JOptionPane.showMessageDialog(null,"Hexagone n°:"+jp2.numero);
- }
-
- });// Evenement qui survient au clicque
- jp.add(jp2);// Ajoute le composant à la fenêtre
- win.setSize(640, 480);// Redimensionne la fenetre
- win.setVisible(true);// Affiche la fenetre
-
- win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Permet de quiter l'application à la fermeture de la fenêtre
- }
-
- }
-
- @SuppressWarnings("serial")
- class AffGrille extends JPanel{ // Classe personnelle qui crée une grile hexagonale.
- final static int cote=26; // Ceci définit la taille du côté d'un polygone
- int numero=0; // Retien le n° du polygone sur lequel est la souris
- Polygon pol;
- @Override
- public void paint(Graphics arg0) {
- Polygon p2=getPolygon(0, 0, cote); // Crée un hexagone
- Rectangle r=p2.getBounds(); // Récupère le plus petit rectangle // aux bord de la fenêtre dans lequel l'hexagone peut s'inscrire
- Point hovered=null;
- arg0.setColor(Color.black);
- super.paint(arg0);
- Graphics2D g2d;
-
-
-
- g2d=(Graphics2D) arg0;
- BasicStroke bs1=new BasicStroke(1);// Permet de fixer l'épaisseur du trait dans la suite
- BasicStroke bs3=new BasicStroke(3);// Idem
-
- g2d.setStroke(bs1);
-
-
- for(int l=0;l<30;l=l+2){// Remarquer le "+2" car la grille est constituée de 2 sous grilles (les lignes impaires sont décallées)
- for(int c=0;c<30;c++){
- Point p;
- p=getMousePosition();
- Polygon poly=getPolygon(c*r.width, (int)(l*cote*1.5),cote);
- if(p!=null && poly.contains(p)){
- hovered=new Point(c*r.width, (int)(l*cote*1.5));
- numero=l*10+c;
- pol=poly;
- }
- g2d.draw(poly);
- }
- }
- for(int l=1;l<30;l=l+2){
- for(int c=0;c<30;c++)
- {
- Point p;
- p=getMousePosition();
- Polygon poly=getPolygon(c*r.width+r.width/2, (int)(l*cote*1.5+0.5),cote);
- //arg0.setColor(Color.black);
- if(p!=null && poly.contains(p)){
- hovered=new Point(c*r.width+r.width/2, (int)(l*cote*1.5+0.5));
- numero=l*10+c;
- pol=poly;
- }
- g2d.draw(poly);
- }
- }
- if(hovered!=null){
- arg0.setColor(Color.red);
- g2d.setStroke(bs3);
- Polygon p=getPolygon(hovered.x, hovered.y,cote);
- g2d.draw(p);
- }
- }
-
- public Polygon getPolHover(){
- return pol;
- }
-
- public static Polygon getPolygon(int x,int y,int cote){// Forme le polygone
- int haut=cote/2;
- int larg=(int)(cote*(Math.sqrt(3)/2));
- Polygon p=new Polygon();
- p.addPoint(x,y+haut);// /
- p.addPoint(x+larg,y); // \
- p.addPoint(x+2*larg,y+haut);// |
- p.addPoint(x+2*larg,y+(int)(1.5*cote)); // /
- p.addPoint(x+larg,y+2*cote);// \
- p.addPoint(x,y+(int)(1.5*cote));// |
- return p;
- }
-
-
-
-
-
- }
-
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/*
* Cette classe permet d'utiliser une grille d'hexagone
* C'est très très lent puisque chaque segment est redessiné 2 fois !
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
JFrame win=new JFrame(); // Crée la fenetre principale
JPanel jp=(JPanel) win.getContentPane(); // Récupère le conteneur de la fenêtre
final AffGrille jp2=new AffGrille(); // Crée une instance de la classe privée AffGrille
jp2.addMouseMotionListener(new MouseMotionListener(){
Polygon p;
@Override
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent arg0) {
p=jp2.pol;
if(!p.contains(arg0.getPoint())){
jp2.repaint();
}
}
});// Repeind jp2 lorsque la souris se déplace
jp2.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent arg0) {
super.mouseClicked(arg0);
JOptionPane.showMessageDialog(null,"Hexagone n°:"+jp2.numero);
}
});// Evenement qui survient au clicque
jp.add(jp2);// Ajoute le composant à la fenêtre
win.setSize(640, 480);// Redimensionne la fenetre
win.setVisible(true);// Affiche la fenetre
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Permet de quiter l'application à la fermeture de la fenêtre
}
}
@SuppressWarnings("serial")
class AffGrille extends JPanel{ // Classe personnelle qui crée une grile hexagonale.
final static int cote=26; // Ceci définit la taille du côté d'un polygone
int numero=0; // Retien le n° du polygone sur lequel est la souris
Polygon pol;
@Override
public void paint(Graphics arg0) {
Polygon p2=getPolygon(0, 0, cote); // Crée un hexagone
Rectangle r=p2.getBounds(); // Récupère le plus petit rectangle // aux bord de la fenêtre dans lequel l'hexagone peut s'inscrire
Point hovered=null;
arg0.setColor(Color.black);
super.paint(arg0);
Graphics2D g2d;
g2d=(Graphics2D) arg0;
BasicStroke bs1=new BasicStroke(1);// Permet de fixer l'épaisseur du trait dans la suite
BasicStroke bs3=new BasicStroke(3);// Idem
g2d.setStroke(bs1);
for(int l=0;l<30;l=l+2){// Remarquer le "+2" car la grille est constituée de 2 sous grilles (les lignes impaires sont décallées)
for(int c=0;c<30;c++){
Point p;
p=getMousePosition();
Polygon poly=getPolygon(c*r.width, (int)(l*cote*1.5),cote);
if(p!=null && poly.contains(p)){
hovered=new Point(c*r.width, (int)(l*cote*1.5));
numero=l*10+c;
pol=poly;
}
g2d.draw(poly);
}
}
for(int l=1;l<30;l=l+2){
for(int c=0;c<30;c++)
{
Point p;
p=getMousePosition();
Polygon poly=getPolygon(c*r.width+r.width/2, (int)(l*cote*1.5+0.5),cote);
//arg0.setColor(Color.black);
if(p!=null && poly.contains(p)){
hovered=new Point(c*r.width+r.width/2, (int)(l*cote*1.5+0.5));
numero=l*10+c;
pol=poly;
}
g2d.draw(poly);
}
}
if(hovered!=null){
arg0.setColor(Color.red);
g2d.setStroke(bs3);
Polygon p=getPolygon(hovered.x, hovered.y,cote);
g2d.draw(p);
}
}
public Polygon getPolHover(){
return pol;
}
public static Polygon getPolygon(int x,int y,int cote){// Forme le polygone
int haut=cote/2;
int larg=(int)(cote*(Math.sqrt(3)/2));
Polygon p=new Polygon();
p.addPoint(x,y+haut);// /
p.addPoint(x+larg,y); // \
p.addPoint(x+2*larg,y+haut);// |
p.addPoint(x+2*larg,y+(int)(1.5*cote)); // /
p.addPoint(x+larg,y+2*cote);// \
p.addPoint(x,y+(int)(1.5*cote));// |
return p;
}
}
Conclusion
Ce code est lent car pour mettre en évidence 1 hexagone, tout est redessiné. De plus, il donne un faux numéro d'hexagone si l'on clique en dehors de la grille.(pas de contrôle de fait)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
probleme Dessin Java2D [ par fdcj ]
Bonjour, je souhaite réaliser un sudoku. Pour l'instant, j'ai créé ma grille de jeu avec une JTable mais j'aimerai rajouter par dessus
java2D + texture mapping [ par lao_tseu ]
bonjour a tous ! Je rencontre quelques difficultées en java pour mapper une image sur un polygone(quelconque) .... Je voulais
Probleme avec mon Timer [ par issoux ]
bonsoir,J'ai un probleme avec mon Timer. J'utilise un timer dans un jeu de sudoku .Le prob c'est que j'ai une option qui vide ma grille pou
fusion Graphics2D et AffineTransform [ par omcougar ]
Bonjour,je joue un peu avec les fonctions 2D et pour ce faire j'ai crée un petit jeu avec des personnagues qui
JButton [ par Ombitious_Developper ]
Salut:Je développe actuellement une petite application qui utilise une sorte de grille pour afficher des lettres et des chiffres.Pour assurer la persi
Aide réalisation d'un projet sudoku [ par iznogoudatall ]
Bonjour à tous,J'ai pour mission dans le cadre de ma deuxième année d'IUT informatique de créér un sudoku en java.Malheureusement je bloque sur la cré
Besoin d'aide au code Java2D [ par huongthuy ]
Bonjour, j'ai besoin d'un code de JAVA pour représenter graphiquement toutes les fonctions par exemple : la fonction linéaire y = ab, la fon
Jlabels Dynamiques [ par delphisaltior ]
voila en fait l'objectif c'est de placer des labels sur une grille . l'idée étant d'afficher le triangle de pascal a l'ordre nj'ai implémenté une prem
problème de rafraichissement d'un canevas [ par dev2008 ]
Bonjour, J'ai un problème, en fait je travaille sur un canevas et lorsque l'utilisateur clique sur un bouton, certaines cases de ma grille doivent ch
Graphics2D [ par didoux95 ]
Bonjour à tous.J'ai créer un Graphics2D (Graphics2D g2d;) comment est ce que je dois l'initialiser ?J'ai essayé en faisant (Graphics2D g2d = null;) ma
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : SQLRE : SQL par Julien39
Cliquez pour lire la suite par Julien39
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|