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
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|