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 :

Ajustement au contenu


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut Ajustement au contenu
    Bonjour,

    Je rencontre quelques soucis avec l'utilisation de la méthode pack() sur une JFrame.

    En fait, j'ai une seule JFrame, avec un JPanel principal associé à un CardLayout, et plusieurs JPanel susceptibles d'être visibles via le layout (la partie gestion du layout fonctionne correctement).

    Le problème est que mes différents panels n'ont pas forcément la même taille, et que je voudrais donc, à l'affichage de l'un deux, faire en sorte que ma fenêtre s'adapte à ce panel. Pour ce faire, je gère le changement de panels comme suit :

    Code MaJFrame.java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private JPanel monPanelPrincipal;
     
    public void changerPanel(JPanel _panel) {
         // En fait, ce sont des panels personnalisés, getNomPanel() retournant le nom utilisé comme clé pour le panel lors de l'ajout au layout
         ((CardLayout) monPanelPrincipal.getLayout()).show(monPanelPrincipal, _panel.getNomPanel());
     
         // Tentative d'ajustement de la taille de la JFrame
         this.setLocationRelativeTo(null);
         this.pack();
    }

    Sur mon premier panel, cela fonctionne, par contre sur le second, qui est plus complexe, il me manque une bonne partie en longueur. Ce socond panel contient les éléments suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    - Second panel (layout : GridLayout(1,2)) :
         - Sous-panel_1 (layout : GridBagLayout) :
              - Plusieurs composants ;
         - Sous-panel_2 (pas de layout) :
              - Image ;
    Pour le moment, je ne fixe la taille de mes containers à aucun endroit (si ce n'est un MinimumSize pour la JFrame).

    J'ai l'impression que le fait que mon second panel est composé deux autres panels est la source du problème. Quelqu'un pourrait-il confirmer/infirmer ceci, ou bien aurait une piste pour contourner le problème ?

    Merci.

    Mako.

  2. #2
    Membre très actif
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Par défaut
    salut

    pourquoi ne pas utiliser pack() lorsque la totale de ton contenu de frame est faite ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par burndev Voir le message
    salut

    pourquoi ne pas utiliser pack() lorsque la totale de ton contenu de frame est faite ?
    Bonjour,

    Qu'est-ce que tu entends par "la totale de ton contenu de frame" exactement ? Parce que le fait est que je vais devoir tout d'abord afficher un premier panel, laissez l'utilisateur faire ce qu'il a faire dessus, et lors du clic sur un bouton de ce panel, afficher le second. Mais je voudrais que lorsque je passe du premier au second, la fenêtre se réadapte à son contenu (étant donné que ces deux panels peuvent ne pas avoir la même taille). En outre, la taille du second panel n'est pas fixe ni connue à l'avance (elle est conditionnée par données saisies par l'utilisateur sur le premier panel).

    J'espère avoir été assez clair...

    Mako.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Qu'utilises tu pour placer l'image dans ton dernier JPanel? As tu redéfini le paintComponent? As tu placé un JLabel à l'intérieur de ton JPanel?
    Comment gères tu la preferredSize du composant correspondant à ton image? (sur laquelle peut s'appuyer la méthode pack pour calculer les tailles des composants)?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Citation Envoyé par sinok Voir le message
    Qu'utilises tu pour placer l'image dans ton dernier JPanel? As tu redéfini le paintComponent? )
    Mon sous-panel_2 possède une BufferedImage. Je dessine ce que je veux quand je veux sur cette image, et j'ai surchargé le paintComponent(Graphics gr) de ce sous-panel_2 comme suit :

    Code MonSousPanel_2.java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Override
    public void paintComponent(Graphics gr) {
         super.paintComponent(gr);
         // Affichage de l'image (getImage() retourne le BufferedImage de ce panel)
         gr.drawImage(getImage(), 0, 0, getImage().getWidth(), getImage()
    	.getHeight(), null);
    }

    Cette façon de procéder m'avait été conseillé lors d'un précédent problème (voir cette discussion pour plus de détails).

    Citation Envoyé par sinok Voir le message
    As tu placé un JLabel à l'intérieur de ton JPanel?
    Si tu parles du sous-panel_2, non, il n'y a que la BufferedImage comme décrit plus haut.

    Citation Envoyé par sinok Voir le message
    Comment gères tu la preferredSize du composant correspondant à ton image?
    Au départ, je ne le gérais pas du tout, en partant du principe que c'était au layout de faire ce boulot. En tâtonnant, j'arrive à un résultat "moins pire" en mettant le preferedSize du sous-panel_2 au dimension de la BufferedImage (à l'initialisation).

    En faisant cela, mon sous-panel_2 se retrouve avec la bonne taille (adaptée à l'image). Par contre, j'ai l'impression que mon sous-panel_1 prend également les mêmes dimensions que celles du sous-panel_2, alors qu'il avait des dimensions correctes (par rapport à son contenu) avant.


    Mako.

Discussions similaires

  1. auto-ajustement du contenu d'une page
    Par guintolli dans le forum SharePoint
    Réponses: 5
    Dernier message: 05/08/2008, 16h48
  2. Ajuster le contenu des cellules de jtable en milieu
    Par opensource dans le forum Composants
    Réponses: 2
    Dernier message: 17/03/2008, 15h03
  3. [Formulaire]Contôle ajustable au contenu
    Par egg3774 dans le forum IHM
    Réponses: 2
    Dernier message: 13/04/2007, 16h55
  4. Grandeur de boite/div qui s'ajuste au contenu
    Par nikicaillou dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 05/01/2007, 17h31
  5. Réponses: 9
    Dernier message: 27/07/2006, 14h38

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