begin process at 2010 02 09 16:06:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths et Algorithmes

 > GRILLE HEXAGONALE

GRILLE HEXAGONALE




 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 du même auteur

EVALUATION D'UNE EXPRESSION NPI (NOTATION POLONAISE INVERSE)
Source avec Zip DE LOGIQUE DE PROGRAMMATION À JAVA

 Sources de la même categorie

Source avec Zip CLASSE MATRICE par frankladen11
Source avec Zip Source avec une capture RÉSOLUTION D'ÉQUATION GRÂCE AU CALCUL DES DÉTERMINANTS par frankladen11
Source avec Zip TYPE DE DONNÉES ABSTRAIT GRAPHE par smutsonberg
Source avec Zip Source avec une capture SIMPLEXE ET DUAL par MrRenaud
Source avec Zip ALGORITHME DE BELLMAN, CALCUL DES TEMPS AU PLUS TÔT ET RECHE... par michaelcourcy2005

 Sources en rapport avec celle ci

AFFICHER UNE ÉTOILE AVEC JAVA2D par 2mohamed2
TEXTE AVEC OMBRE par 2mohamed2
Source avec Zip Source avec une capture AQUARIUM 2D AVEC DOUBLE-BUFFERING ET EN UTILISANT UNIQUEMENT... par Cornellus1985
Source avec Zip Source avec une capture JWOLFENSTEIN 3D ! par tucobouch
Source avec Zip Source avec une capture TETRIS OLD SCHOOL par provenzano24

Commentaires et avis

Commentaire de Amina21 le 18/03/2008 22:02:41

salut, C'est bien krissssss !!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

probleme Dessin Java2D [ par fdcj ] Bonjour, je souhaite r&#233;aliser un sudoku. Pour l'instant, j'ai cr&#233;&#233; 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&#233;es en java pour&nbsp; mapper une image&nbsp; sur un polygone(quelconque)&nbsp; .... Je voulais Probleme avec mon Timer [ par issoux ] bonsoir,J'ai un probleme avec mon&nbsp;&nbsp;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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales