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 :

Ajout/Suppression dynamique de JPanel (dans un autre JPanel)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Ajout/Suppression dynamique de JPanel (dans un autre JPanel)
    Bonjour,
    J'ai quelques problèmes avec mon affichage. J'ai une liste de Panel avec quelques éléments déjà dedans que je souhaite insérer dans un panel à la création de mon JDialog.
    Dans le Jdialog il y'a deux boutons, ajouter et supprimer, qui, respectivement, ajoutent un autre Jpanel en bas de ceux existant et l'autre qui supprime le dernier JPanel qui a été ajouté.
    Le problème étant qu'a un moment, il y'a un grand écart entre deux JPanel, quelque soit le nombre de JPanel ajoutés je ne sais pas pourquoi. Petites images de démonstration :



    Petites précisions, mes layout sont des GrisBagLayout et j'utilise WindowBuilder sous Eclipse. Voici maintenant les bouts de code concernés (J'ai essayé de mettre le strict nécessaire pour que ça soit compréhensible). Je pense que le problème vient de la valeur que j'affecte à anchor dans les GridBagConstraints des objets que j'ajoute mais quelque soit la valeur ça ne fait pas ce que je veux..

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    public class PanelExtractionLog extends JPanel implements ActionListener {
        private List <PanelSearchFileExtraction> listChamps; // Liste des JPanel à insérer
        private JPanel                           panelListFiles; // panel dans lequel on insere
        private Dialog                           dialog;
     
        /**
         * Create the panel.
         */
        public PanelExtractionLog (Dialog dialog) {
            super ();
            this.dialog = dialog;
            this.listChamps = (List <PanelSearchFileExtraction>) new ArrayList <PanelSearchFileExtraction> ();
            listChamps.add (new PanelSearchFileExtraction (listChamps.size (),
                    dialog));
            listChamps.add (new PanelSearchFileExtraction (listChamps.size (),
                    dialog));
            listChamps.add (new PanelSearchFileExtraction (listChamps.size (),
                    dialog));
     
            GridBagLayout gridBagLayout = new GridBagLayout ();
            gridBagLayout.columnWidths = new int[] { 76, 315, 53, 0 };
            gridBagLayout.rowHeights = new int[] { 0, 242, 22, 0 };
            gridBagLayout.columnWeights = new double[] { 0.0, 1.0, 0.0,
                    Double.MIN_VALUE };
            gridBagLayout.rowWeights = new double[] { 0.0, 1.0, 0.0,
                    Double.MIN_VALUE };
            setLayout (gridBagLayout);
     
            JButton btnAjouter = new JButton ("Ajouter");
            btnAjouter.setMargin (new Insets (3, 7, 3, 7));
            btnAjouter.setIcon (new ImageIcon ("images/add.png"));
            GridBagConstraints gbc_btnAjouter = new GridBagConstraints ();
            gbc_btnAjouter.fill = GridBagConstraints.HORIZONTAL;
            gbc_btnAjouter.insets = new Insets (0, 0, 5, 5);
            gbc_btnAjouter.gridx = 0;
            gbc_btnAjouter.gridy = 0;
            btnAjouter.setActionCommand ("Add");
            btnAjouter.addActionListener (this);
            add (btnAjouter, gbc_btnAjouter);
     
            JButton btnRetirer = new JButton ("Retirer");
            btnRetirer.setMargin (new Insets (3, 7, 3, 7));
            btnRetirer.setIcon (new ImageIcon ("images/delete_2-16.png"));
            GridBagConstraints gbc_btnRetirer = new GridBagConstraints ();
            gbc_btnRetirer.anchor = GridBagConstraints.WEST;
            gbc_btnRetirer.insets = new Insets (0, 0, 5, 5);
            gbc_btnRetirer.gridx = 1;
            gbc_btnRetirer.gridy = 0;
            btnRetirer.setActionCommand ("Remove");
            btnRetirer.addActionListener (this);
            add (btnRetirer, gbc_btnRetirer);
     
            panelListFiles = new JPanel ();
            GridBagConstraints gbc_panelListFiles = new GridBagConstraints ();
            gbc_panelListFiles.gridwidth = 3;
            gbc_panelListFiles.insets = new Insets (0, 0, 5, 5);
            gbc_panelListFiles.fill = GridBagConstraints.BOTH;
            gbc_panelListFiles.gridx = 0;
            gbc_panelListFiles.gridy = 1;
            add (panelListFiles, gbc_panelListFiles);
            GridBagLayout gbl_panelListFiles = new GridBagLayout ();
            gbl_panelListFiles.columnWidths = new int[] { 0, 0 };
            gbl_panelListFiles.rowHeights = new int[] { 0, 0 };
            gbl_panelListFiles.columnWeights = new double[] { 0.0, Double.MIN_VALUE };
            gbl_panelListFiles.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
            panelListFiles.setLayout (gbl_panelListFiles);
            {
                /*
                 * Insertion dans le JPanel de la liste préchargée
                 */
                for (int i = 0; i < listChamps.size (); ++i) {
                    GridBagConstraints gbc_pan = new GridBagConstraints ();
                    gbc_pan.gridwidth = 1;
                    gbc_pan.fill = GridBagConstraints.HORIZONTAL;
                    gbc_pan.anchor = GridBagConstraints.NORTH;
                    gbc_pan.gridx = 0;
                    gbc_pan.gridy = i;
                    panelListFiles.add (listChamps.get (i), gbc_pan);
                }
            }
     
            /*
             * Suite du code...
             */
     
        } // constructeur
     
        /*
         * (non-Javadoc)
         * @see
         * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */
        @Override
        public void actionPerformed (ActionEvent e) {
            String action = e.getActionCommand ();
     
            if (action == "Remove") {
                int indice = listChamps.size () - 1;
                System.out.println (listChamps.size ());
                panelListFiles.remove (indice);
                listChamps.remove (indice);
     
            } // action "Remove"
            else if (action == "Add") {
                int taille = listChamps.size ();
                System.out.println (taille);
                listChamps.add (new PanelSearchFileExtraction (taille, dialog));
                GridBagConstraints gbc_pan = new GridBagConstraints ();
                gbc_pan.gridwidth = 1;
                gbc_pan.fill = GridBagConstraints.HORIZONTAL;
                gbc_pan.anchor = GridBagConstraints.NORTH;
                gbc_pan.gridx = 0;
                gbc_pan.gridy = taille;
                panelListFiles.add (listChamps.get (taille), gbc_pan);
     
            } // action "Add"
     
            revalidate ();
            repaint ();
     
        } // actionPerformed ()
     
    }
    Merci d'avance pour vos réponses, je ne sais pas si j'ai été clair donc n'hésitez pas à demander des précisions

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je m'y connait pas vraiment a fond en GridBagLayout mais pour moi, la variable anchor est à utiliser lorsque que l'objet ou le bouton est excentré du reste et à placer à une place définis comme début/fin de la page, de la ligne..etc.

    Qu'est ce que ça te donne si tu les laisse par défaut c'est à dire à CENTER ?
    (pour moi tes panels devraient s'aligner sans problème sur gridy en fonction de i puis lors de l'ajout en fonction de la taille de ta List..en théorie )

    Sinon personnellement je met souvent des borders sur mes panels pour savoir exactement où et quel panel a un soucis, ashtuce ashtuce.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Si je fais Center, l'espace se répartit de chaque côté de tous les JPanel, ce qui donne un coté épars et surtout trés trés moche -_-

    EDIT : Je viens de trouver la solution à mon problème !
    Le problème venait bien de la valeur de anchor mais pas des JPanel que j'ajoutais, je devais mettre North à mon panelListFiles. Ca marche beaucoup mieux désormais, que ça soit à l'ajout ou à la suppression

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

Discussions similaires

  1. JPanel dans un autre JPanel
    Par richard_sraing dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/08/2009, 14h12
  2. Réponses: 8
    Dernier message: 30/03/2009, 12h45
  3. Scrollable JPanel dans un autre JPanel
    Par Arcam dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 21/10/2007, 14h54
  4. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 18h50
  5. Donner le focus à un JPanel dans un autre JPanel
    Par Azanael dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 21/06/2005, 23h34

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