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

Agents de placement/Fenêtres Java Discussion :

décalage sur l'agencement de JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut décalage sur l'agencement de JPanel
    Bonjour à tous,

    1/ ce qui fonctionne bien
    j'ai réalisé une interface graphique qui divise mon contenpane en trois zones :
    un panneau jaune en bas, un panneau orange à droite, et le reste du contentpane reste en bleu.

    le code partiel est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // FONCTION AJOUT DES DEUX PANNEAUX	
    		public void ajout_panneaux()  {
    			configurer_pgauche(); // définit les affichages à GAUCHE
    			contentpane.add(pGauche, BorderLayout.EAST);
    			configurer_pBas();  // définit les affichages en BAS
    			contentpane.add(pBas, BorderLayout.SOUTH);
    			Main_32.mafenetre.repaint();
    	}
    Nom : conten_1.png
Affichages : 107
Taille : 20,2 Ko

    Quand je clique sur le choix de la grille en 3x3, je calcule la surface restante (zone bleue, je met en place ma grille qui s'affiche et prend l'espace restant au centre :
    Nom : conten_2.png
Affichages : 99
Taille : 10,5 Ko


    2/ Ce qui bugge un peu

    En fait, moi je souhaiterais que le panneau vertical soit à gauche, plutôt qu'à droite, j'ai donc simplement changé le code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    configurer_pgauche(); // définit les affichages à GAUCHE
    			contentpane.add(pGauche, BorderLayout.WEST);
    Quand je lance, tout est ok, les deux panneaux sont bien placés.
    Nom : conten_3.png
Affichages : 98
Taille : 17,5 Ko

    Le problème, c'est que quand j'affiche ma grille, la position "Center" semble être calculée à partir du borde gauche du contentPane, sans tenir compte qu'il y a un panneau déja présent sur ce bord, et donc, il me manque à droite, la largeur de ma grille qui semble cachée sous le panneau vertical. C'est d'ailleurs pour cela je pense, qu'il me manque cette largueur pour couvrir le bleu à droite.
    Nom : conten_4.png
Affichages : 103
Taille : 10,6 Ko

    De plus, si je demande un "repaint" en changeant à peine la dimension de la fenêtre, tout rentre dans l'ordre et la grille en gris , couvre bien la zone "Center" du content pane.

    Cependant, cela est un peu décevant car l'effet d'affichage initial nickel, sans zone bleu, est plutôt raté, et j'aimerais bien comprendre pourquoi l'affichage est parfait avec le panneau vertical coté "WEST" et se trouve déstabilisé en préférant le placer du coté "EAST"??

    En espérant avoir été clair, si vous avez rencontré ce genre de déconvenue, merci de votre aide.....

  2. #2
    Membre régulier

    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par patdu26 Voir le message
    De plus, si je demande un "repaint" en changeant à peine la dimension de la fenêtre, tout rentre dans l'ordre et la grille en gris , couvre bien la zone "Center" du content pane.
    Peu être qu'il y a plus qu'un repaint en changeant la dimension de la fenêtre.
    Essayes revalidate aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	Main_32.mafenetre.revalidate();
    	Main_32.mafenetre.repaint();

  3. #3
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut Ca fonctionne mais.... je ne sais pas pourquoi!!! C'est grave??
    bonjour seroze, ton idée des "validate" et "revalidate", m'a permis de passer une bonne partie de la journée à essayer de comprendre et de trouver une solution.

    Le pire, c'est que ca a l'air de fonctionner nickel, mais je ne vois pas trop pourquoi....

    En fait quand je joue du "revalidate" sur les deux conteneurs initiaux : pBas placé en bas, et pGauche placé à gauche, la présentation reste toujours avec défaut, c'est à dire la partie bleu du contentpane non remplie car ma grille g1 démarre complétement à gauche du contentpane, et non après le panneau de gauche.....

    j'ai rajouté ce code, quand je place en troisième et dernier sur mon contentpane, la grille g1 en position CENTER :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                            System.out.println("Avant revalidate(), pBas : " + pBas.isValid());
    			System.out.println("Avant revalidate(), pGauche : " + pGauche.isValid());
     
    			contentpane.revalidate();
     
    			System.out.println("APRES revalidate(), pBas : " + pBas.isValid());
    			System.out.println("APRES revalidate(), pGauche : " + pGauche.isValid());
     
     
    			contentpane.add(modèle.Var.g1, BorderLayout.CENTER);

    Le plus étrange c'est que si je commente la ligne "contentpane.revalidate(), ou que la laisse active, ma console indique la même chose :

    Avant revalidate(), pBas : true
    Avant revalidate(), pGauche : true
    APRES revalidate(), pBas : true
    APRES revalidate(), pGauche : true

    Cela semble donner le même résultat, mais pourtant, si la ligne est commentée, l'affichage est raté (partie bleue restante sur le contentpane non remplie, voir photo présentée avant) et si je met la ligne active, l'affichage est nickel, tout l'écran est complet et conforme à mon attente....

    "revalidate() doit peut-être faire des choses en profondeur qui remet tout d'équerre pour l'organisation de l'affichage??
    Si vous connaissez bien ce domaine, je serais heureux de comprendre... merci.

  4. #4
    Membre régulier

    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 124
    Points
    124
    Par défaut
    Désolé je n'en sais pas beaucoup plus.
    La méthode repaint redessine le composant, la méthode revalidate recalcule le layout de la fenêtre. Au début j'utilisait invalidate à la place de revalidate. Je ne me rappelle plus pourquoi invalidate ne m'a pas donné entière satisfaction. Parfois je suis pragmatique et quand une solution fonctionne, je la conserve même si je ne comprends pas toutes les subtilités.

  5. #5
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut merci seroze
    merci pour ton message,
    je vais faire comme toi pour le moment, je vais être pragmatique!
    Même tout n'est pas limpide, ça a le mérite de fonctionner.
    A bientôt peut-être si besoin...

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

Discussions similaires

  1. [JFrame] récuperer le path du fichier glissé sur une JFrame ou JPanel
    Par AliJava dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 19/12/2007, 08h25
  2. Décalage sur une même ligne de formulaire
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/09/2006, 19h05
  3. Décalage sur une même ligne
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 03/08/2006, 18h24
  4. Problème de décalage sur une page
    Par baleiney dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 26/05/2006, 17h54
  5. [CSS] Décalage sur FireFox pour le moins étrange ...
    Par prgasp77 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 26/10/2005, 19h56

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