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
TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice CRéATION D'UNE BASE DE DONNéE SOUS SQL AZURECRéATION D'UNE BASE DE DONNéE SOUS SQL AZURE par junarnoalg
Sans rentrer dans les détails, je me propose ici de faire un rapide tour de ce que propose SQL Azure.
SQL Azure est avant tout un service d'hébergement de base de données relationnelles construit sur SQL Server. Il permet aux entreprises d...
Cliquez pour lire la suite de l'article par junarnoalg TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Xavier Moreels et Julien Bakmezdjian Ce sujet est lié au partage des applications comme services dans SharePoint 2010, ceci représente la possibilité de créer sa propre application qui sera utilisable comme ceux en standard : Search...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|