IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[Image] Quadrillage JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut [Image] Quadrillage JPanel
    Salut à tous,
    J'ai un JPanel avec une image de fond et au-dessus un quadrillage.
    Le problème c'est que je redessine à chaque fois le quadrillage dans sa totalité. (deux boucle for ou j'utilise la méthode drawLine()). Je voudrais faire en sorte de créer une seule fois une image "quadrillage" lors de l'initialisation de mon composant que je réutiliserai par la suite en lieu et place de mes deux boucles for.

    Quelqu'un aurait-il une idée sur comment créer une "image quadrillage" à partir de la fonction drawLine() ?

    Merci d'avance

  2. #2
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    tu "capture" une image de (image + quadrillage) et tu remplace le tout par la nouvelle image.

    pour la capture, je te renvoie aux FAQ de DVP
    [EDIT]Laisse tomber cette réponse, j'ai mal compris ton problème[/EDIT]

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Tu peux dessiner ton quadrillage dans une image transparente et ensuite au choix :

    - dans paintComponent() dessiner cette image APRES avoir peint l'image de fond. Attention si ton composant est redimensionne, il te faudra probablement recalculer l'image de la grille (voir ComponentListener). Cette methode est plus pratique si ta grille contient des informations (coordonnees, etc...).

    - la mettre dans un TexturePaint et dans paintComponent() peindre un grand rectangle couvrant toute la zone de dessin avec cette texture APRES avoir peint l'image de fond. Cette methode peut etre interessante nottament si ta grille ne comporte pas d'indication speciale (ex : juste une grille de lignes). En plus cela te permet de creer une image de taille minimale (ex : juste une cellule de la grille) et d'economiser ainsi de la memoire.

    Ceci dit a moins que le dessin de ta grille ne soit gourmand en ressources et en temps, il n'y a rien de mal a le dessiner directement dans le paintComponent() avec tes boucles.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre confirmé Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Tiens bah je viens de faire ça ce soir pour un truc a moi :

    Ici :

    panelSize est la taille du JPanel.
    SYSTEM_NOMBRE_PLANETE est le nombre de cases sur une largeur (je dessine une grille carrée)
    SYSTEM_MAP_PLANETESIZE est la largeur d'une case.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public void paintComponent (Graphics g) {
    	//Dessin du background
    	this.drawBackground(g);
     
    	//Dessin du quadrillage
    	this.drawTable(g);
     
    }
    private void drawBackground(Graphics g){
     
    	int nbh = ((int)this.panelSize.getHeight()/ifond.getHeight(null))+1;//Calcul du nombre d'images de fond pour la hauteur
    	int nbl = ((int)this.panelSize.getWidth()/ifond.getWidth(null))+1;//Meme calcul pour la largeur
    	for (int i = 0; i<nbh; i++) {//Dessin dans la hauteur			
    		for (int j = 0; j<nbl; j++) {//Dessin dans la largeur				
    			//Dessin de l'image de fond
    			g.drawImage(ifond, ifond.getWidth(null)*j, i*ifond.getHeight(null), null);				
    		}			
    	}		
    }
    private void drawTable(Graphics g){
     
    	g.setColor(Color.GREEN);
    	for(int i = 1; i<GConstantes.SYSTEM_NOMBRE_PLANETE;i++){
    		g.drawLine(i*GConstantes.SYSTEM_MAP_PLANETESIZE, 0, i*GConstantes.SYSTEM_MAP_PLANETESIZE,GConstantes.SYSTEM_NOMBRE_PLANETE*GConstantes.SYSTEM_MAP_PLANETESIZE);			
    		g.drawLine(0, i*GConstantes.SYSTEM_MAP_PLANETESIZE, GConstantes.SYSTEM_NOMBRE_PLANETE*GConstantes.SYSTEM_MAP_PLANETESIZE,i*GConstantes.SYSTEM_MAP_PLANETESIZE);
    	}
    }
    Remarques :
    -Tu veras qu'une seule boucle suffit pour dessiner le quadrillage.
    -Comme tu peux l'observer je calcule le nombre d'image a afficher en hauteur et largeur de facon a pouvoir afficher une petite image en mosaique, pratique pour les grandes fenetres.

    Ca me donne ca :


  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Vi, c'est tres facile de faire une seule boucle... quand on a le meme nombre de lignes et de colonnes dans sa grille......
    Ca ne regle en rien le probleme souleve

    A oui tiens j'oubliais une autre maniere de rendre ta grille re-utilisable est de deplacer son dessin dans une methode externe plus generaliste genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class DrawingUtilities {
    
      /** Draw a grid, this method will use the current paint and stroke of the drawing context.
       * @param graphics The graphics context.
       * @param width The width of the drawing area.
       * @param height The height of the drawing area.
       * @param sizeX Width of a grid cell.
       * @param sizeY Height of a grid cell.
       * @param offsetX Offset for the first stroke on the X axis (usually 0) ; 0 &lt;= <code>offsetX</code>  &lt; <code>sizeX</code>.
       * @param offsetY Offset for the first stroke on the Y axis (usually 0) ; 0 &lt;= <code>offsetX</code>  &lt; <code>sizeY</code>.
      */
      public static void drawGrid(Graphics2D graphics, int width, int height, sizeX, sizeY, int offsetX, int offsetY) {
        ...
      }
    }
    Apres a toi de voir si tu veux l'appeler sur une image ou directement depuis le paintComponent().
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Par défaut
    Merci pour toutes vos réponses.
    Je veux appeler ma méthode depuis paintComponent(). En fait je fais un éditeur de map et les lignes me permettent de rendre plus évident les démarcations entre les tiles. normalement j'ai fixé la taille de mon JPanel avec setPreferredSize() donc normalement je ne dois pas avoir à redimensionner l'image du quadrillage. (eut-être je me trompe ?).
    Je vais essayer de dessiner sur une image transparente.

    ps:je suis obligé de faire deux boucles car si je veux changer la taille de mon panel (j'ai une macro MAP_WIDTH et une autre MAP_HEIGHT) pour plus tard peut-être changé la disposition des composants dans ma frame.

  7. #7
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Citation Envoyé par bouye
    Vi, c'est tres facile de faire une seule boucle... quand on a le meme nombre de lignes et de colonnes dans sa grille......
    Ca ne regle en rien le probleme souleve
    C'est pour ça que j'ai dit qu'il était quand même possible de faire une seule boucle ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Image dans JPanel
    Par amel666 dans le forum Graphisme
    Réponses: 1
    Dernier message: 12/09/2007, 16h53
  2. Inserer Image Plusieurs JPanel
    Par keub51 dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 28/03/2007, 01h07
  3. Problème avec image dans JPanel
    Par littleshrimp dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/05/2006, 14h05
  4. Problème avec l'insertion d'une image dans JPanel
    Par anutka dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 16/03/2006, 10h02
  5. [Swing] images et jPanel
    Par nma dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/10/2004, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo