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 :

Augmenter la taille d'un JPanel automatiquement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Augmenter la taille d'un JPanel automatiquement
    Bonjour,

    J'ai une JComboBox. Lorsque je sélectionne un item dans cette JComboBox, je charge n JComponents dans un JPanel (destination).

    Tout ce 'morceaux' est placé dans un JPanel (ligne) qui peut-être répètée autant de fois que demandé dans un JScrollPane



    Destination est un JPanel avec un GridLayout de 2 colonnes et n lignes.

    Le problème est que je voudrais que la ligne augmente sa hauteur en fonction du nombre de composants que j'ajoute dans destination. Afin de conserver une taille correcte aux composants et ne pas avoir le problème rencontré ici avec l'ajout de 2 JTextFields ( montré par la flèche rouge)

    Mais je n'ai absolument aucunes idées sur la façon de le faire...

  2. #2
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    A mon avis, ligne devrait avoir un FlowLayout, qui place les composants les uns à la suite des autres sans les déformer, et destination un GridLayout, comme tu le fais déjà.
    Mais ce n'est que mon avis .

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oui mais si ligne à un FlowLayout tout vas se redimensionner. Mais ce que je veux c'est uniquement que ce que je mette dans destination conserve une hauteur correcte.

    En fait c'est destination qui devrais augmenter sa hauteur en fonction de son contenu et ligne s'y adapterais...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    salut
    tu utilise quoi comme Layout pour ton panel Ligne ?
    car j'ai une idée mais il y a peut etre plus simple et mieux...
    en fait avec le gridBagLayout tu peux spécifié le nombre de ligne et de colonne que ton composant prend, dans ton cas, les 4 premiers composants de ta ligne (la petite image, la date,l'heure et ta JComboBox) devront s'élargir sur le nombre de lignes n de Destination...

    GridBagConstraints c1 = new GridBagConstraints();
    c1.gridheight = n
    panel.add(date,c1)

    je ne me rappelle plus trop de la syntaxe... mais gridBagLayout est le meilleur layout, et je pense pourrais être utile dans ton cas
    sutout que tu peux aussi préciser si tu veux que ce soit centré ou si tu veux que ton composant prennent toute la hauteur, ou meme tout en haut... pour ma que ta date et ton heure soit déformé..., bref je ne sais pas si j'ai été clair...

  5. #5
    Invité
    Invité(e)
    Par défaut
    j'utilise le org.jdesktop.kayout.GroupLayout

    Ton idée me semble bonne sauf que je ne connais pas beacoup le GridBagLayout donc lecture de doc en perspective.
    Je teste et je vous tiens au courant.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon, ça fonctionne sans avoir à modifier les contraintes.
    J'ai donné un GridBagLayout à ligne et coller les composants en haut.
    Destination à un GridLayout de 2 colonnes et n lignes.

    Lorsque j'ajoute des composants dans destination ils se placent les un en dessous des autres sans problèmes.
    MAIS il reste un problème; étant donné que ligne à un GridBagLayout, elle prend tout la place dans le JScrollPane.. or ce n'est pas le but recherché, je voudrais que ligne et un heuteur de 30px par defait et qu'elle s'adapte lorsque je place du contenu dans destination.. mais pas qu'elle prenne la maximum de place en hauteur..

    Edit : Ben non, ça marche pas, quand on à beaucoup de lignes et que l'on ajoute dans composants dans destination, on ne vois pas tout et ça s'écrase de partout

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    tu peux faire un condenser de ton code ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui :
    Ligne :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public class LigneParametre2 extends javax.swing.JPanel {
        private JSeparator jSeparator1;
        private JLabel lblSrc;
        private JComboBox cbbItems;
        private JButton btnDel;
        private JLabel lblUnits;
        private JPanel pnlContent;
        private JTextField fldHeure;
        private JTextField fldDate;
     
        public LigneParametre2() {
            super();
            initGUI();
        }
     
    private void initGUI() {
            try {
                GridBagLayout thisLayout = new GridBagLayout();
                thisLayout.rowWeights = new double[] {0.0, 0.1};
                thisLayout.rowHeights = new int[] {27, 7};
                thisLayout.columnWeights = new double[] {0.0, 0.0, 0.0, 0.5, 1.0, 0.0, 0.0};
                thisLayout.columnWidths = new int[] {35, 64, 41, 20, 135, 82, 36};
                this.setLayout(thisLayout);
                this.setPreferredSize(new java.awt.Dimension(515, 31));
                this.add(getJSeparator1(), new GridBagConstraints(0, 1, 7, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
                this.add(getLblSrc(), new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.NONE, new Insets(7, 1, 1, 1), 0, 0) );
                this.add(getFldDate(), new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(4, 1, 1, 1), 0, 0));
                this.add(getFldHeure(), new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(4, 1, 1, 1), 0, 0));
                this.add(getCbbItems(), new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(4, 1, 1, 1), 0, 0));
                this.add(getPnlContent(), new GridBagConstraints(4, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 1, 1, 1), 0, 0));
                this.add(getLblUnits(), new GridBagConstraints(5, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(8, 2, 1, 2), 0, 0));
                this.add(getBtnDel(), new GridBagConstraints(6, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.NONE, new Insets(4, 1, 1, 1), 0, 0));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     
    }
    L'action d'ajout :
    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
        public void actionPerformed(ActionEvent e) {
            item = (Item) ((JComboBox) e.getSource()).getSelectedItem();
            //panel.setLayout( new BoxLayout(panel, BoxLayout.Y_AXIS));
            panel.setLayout( new GridLayout(item.size(), 2));
            panel.removeAll();
            for (Iterator it = item.iterator(); it.hasNext();) {
                ParametreComponent component = (ParametreComponent) it.next();
                System.out.println(component.getVisualInstance());
                panel.add( new JLabel(component.toString()) );
                panel.add( component.getVisualInstance() );  
                panel.validate();
            }
            ligne.validate();
     
        }

Discussions similaires

  1. [debutant] taille d'un JPanel
    Par Tempotpo dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/02/2006, 15h37
  2. comment augmenter la taille d'un tableau ?
    Par salseropom dans le forum C
    Réponses: 5
    Dernier message: 16/12/2005, 12h47
  3. augmenter la taille d'une tablespace?
    Par sali dans le forum Oracle
    Réponses: 1
    Dernier message: 01/12/2005, 15h52
  4. [Redo log] : augmenter la taille des fichiers
    Par user_oracle dans le forum Oracle
    Réponses: 3
    Dernier message: 29/11/2005, 19h49
  5. []Augmenter la taille de la pile des appels ?
    Par oncle ervil dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/05/2005, 09h29

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