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 :

probleme de disposition avec GridBagLayout dans une fenetre


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut probleme de disposition avec GridBagLayout dans une fenetre
    Bonjour,

    J'ai encore un souci de disposition avec GridBagLayout dans une fenetre.

    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
    private JPanel buildContentPane() {
            JPanel panel = new JPanel();
            panel.setLayout(new GridBagLayout());
     
            nameRuleLabel = new JLabel("Nom de la règle:");
            nameGroupRuleLabel = new JLabel("Nom du groupe de la règle:");
            whenRuleLabel = new JLabel("Conditions:");
            thenRuleLabel = new JLabel("Conséquences:");
     
            nameRuleValue = new JTextField();
            nameRuleValue.setColumns(20);
     
            String[] columnNames = {"Condition","Valeur"};
            List<Condition> conditions = new ArrayList<Condition>();
            ConditionsTableModel model = new ConditionsTableModel(columnNames, conditions);
     
            // JTable des conditions
            whenRuleTable = new JTable(model);
     
            whenRuleTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
     
            whenRuleTable.setPreferredScrollableViewportSize(new Dimension(200, 70));
     
            setUpComboBoxColumn(whenRuleTable.getColumnModel().getColumn(0));
            JScrollPane scrollPaneTable = new JScrollPane(whenRuleTable);
     
            thenRuleValue = new JTextArea();
     
            Object[] elements = new Object[] { "BCS", "RAP", "CV" };
            nameGroupRuleValue = new JComboBox(elements);
     
            JScrollPane scrollPane1 = new JScrollPane(whenRuleValue);
            scrollPane1.setPreferredSize(new Dimension(200, 100));
     
            JScrollPane scrollPane2 = new JScrollPane(thenRuleValue);
            scrollPane2.setPreferredSize(new Dimension(200, 100));
     
            JButton boutonAdd = new JButton("+");
            JButton boutonRemove = new JButton("-");
     
            JButton bouton = new JButton(new ModifyRuleAction(this, ruleBundle, "Modifier la règle"));
     
            GridBagConstraints gbc = new GridBagConstraints();
     
            gbc.insets = new Insets(10, 10, 10, 10);
     
            gbc.gridx = 0;
            gbc.gridy = 0;
            panel.add(nameRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 0;
     
            panel.add(nameRuleValue, gbc);
     
            gbc.gridx = 0;
            gbc.gridy = 1;
            panel.add(nameGroupRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 1;
            panel.add(nameGroupRuleValue, gbc);
     
            gbc.gridx = 0;
            gbc.gridy = 2;
            panel.add(whenRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 2;
            panel.add(scrollPaneTable, gbc);
     
            gbc.insets = new Insets(10, 10, 0, 10);
     
            gbc.gridx = 2;
            gbc.gridy = 2;
            panel.add(boutonAdd, gbc);
     
            gbc.insets = new Insets(0, 10, 10, 10);
     
            gbc.gridx = 2;
            gbc.gridy = 3;
            panel.add(boutonRemove, gbc);
     
            gbc.insets = new Insets(10, 10, 10, 10);
     
            gbc.gridx = 0;
            gbc.gridy = 3;
            panel.add(thenRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 3;
            panel.add(scrollPane2, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 4;
            panel.add(bouton, gbc);
            return panel;
        }

    En fait, j'aimerais que les boutons boutonAdd et boutonRemove soient disposés verticalement l'un de l'autre mais sans espace entre eux, mais ca n'a pas l'air de marcher.

    Pourtant, avant de rajouter boutonAdd dans mon panel, j'ai bien fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gbc.insets = new Insets(10, 10, 0, 10)
    , pour dire que le prochaine composant (boutonRemove) sera juste en dessous, puis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gbc.insets = new Insets(0, 10, 10, 10)
    juste avant de rajouter le boutonRemove, puis enfin je remets l'insets à sa valeur par défaut.

    Une idée?

    PS: Désolé, j'innonde un peu cette section ces derniers jours lol...

    Merci :-)

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Le problème n'est tes Insets, mais que tu as des composants sur la même ligne qui sont bien plus grand en hauteur que tes boutons.

    Tu peut essayer ça (changment d'ancre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    gbc.insets = new Insets(10, 10, 0, 10);
            gbc.anchor = GridBagConstraints.LAST_LINE_START;
            gbc.gridx = 2;
            gbc.gridy = 2;
            panel.add(boutonAdd, gbc);
     
            gbc.insets = new Insets(0, 10, 10, 10);
            gbc.anchor = GridBagConstraints.FIRST_LINE_START;
            gbc.gridx = 2;
            gbc.gridy = 3;
            panel.add(boutonRemove, gbc);
    Mais le mieux serait de créer un panel pour tes 2 boutons avec un autre layout (par exemple un BoxLayout), puis d'ajouter le panel à ton panel principal, ainsi tu rend tes boutons indépendant vis à vis du layout principal.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Re,

    Merci, mais en fait malgrè l'indication, je n'arrive pas à "mixer" le tout, pour décider comment placer exactement mes boutons.
    Par exemple, il me met mes deux boutons verticalement l'un de l'autre collés, mais dans le coin supérieur de ma fenêtre alors que j'ai fait l'ajout de mon second pane dans le pane principal avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gbc.gridx = 2;
    gbc.gridy = 2;
    Voilà ce que j'ai testé:

    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
       private JPanel buildContentPane() {
            JPanel panel = new JPanel();
            panel.setLayout(new GridBagLayout());
     
            nameRuleLabel = new JLabel("Nom de la règle:");
            nameGroupRuleLabel = new JLabel("Nom du groupe de la règle:");
            whenRuleLabel = new JLabel("Conditions:");
            thenRuleLabel = new JLabel("Conséquences:");
     
            nameRuleValue = new JTextField();
            nameRuleValue.setColumns(20);
     
            String[] columnNames = {"Condition","Valeur"};
            List<Condition> conditions = new ArrayList<Condition>();
            ConditionsTableModel model = new ConditionsTableModel(columnNames, conditions);
     
            JPanel panelBoutons = new JPanel();
            panelBoutons.setLayout(new BoxLayout(panelBoutons, BoxLayout.Y_AXIS));
     
            JButton boutonAdd = new JButton( new AddConditionAction(model, "+"));
            JButton boutonRemove = new JButton("-");
     
            panelBoutons.add(boutonAdd);
            panelBoutons.add(boutonRemove);
     
            // JTable des conditions
            whenRuleTable = new JTable(model);
            whenRuleTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
     
            whenRuleTable.setPreferredScrollableViewportSize(new Dimension(200, 70));
     
            initColumnSizes(whenRuleTable);
            JScrollPane scrollPaneTable = new JScrollPane(whenRuleTable);
     
            thenRuleValue = new JTextArea();
     
            Object[] elements = new Object[] { "BCS", "RAP", "CV" };
            nameGroupRuleValue = new JComboBox(elements);
     
            JScrollPane scrollPane1 = new JScrollPane(whenRuleValue);
            scrollPane1.setPreferredSize(new Dimension(200, 100));
     
            JScrollPane scrollPane2 = new JScrollPane(thenRuleValue);
            scrollPane2.setPreferredSize(new Dimension(200, 100));
     
            JButton bouton = new JButton(new ModifyRuleAction(this, ruleBundle, "Modifier la règle"));
     
     
            GridBagConstraints gbc = new GridBagConstraints();
     
            gbc.insets = new Insets(10, 10, 10, 10);
     
            gbc.gridx = 0;
            gbc.gridy = 0;
            panel.add(nameRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 0;
     
            panel.add(nameRuleValue, gbc);
     
            gbc.gridx = 0;
            gbc.gridy = 1;
            panel.add(nameGroupRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 1;
            panel.add(nameGroupRuleValue, gbc);
     
            gbc.gridx = 0;
            gbc.gridy = 2;
            panel.add(whenRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 2;
            panel.add(scrollPaneTable, gbc);
     
            gbc.gridx = 2;
            gbc.gridy = 2;
            panel.add(panelBoutons);
     
            gbc.gridx = 0;
            gbc.gridy = 3;
            panel.add(thenRuleLabel, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 3;
            panel.add(scrollPane2, gbc);
     
            gbc.gridx = 1;
            gbc.gridy = 4;
            panel.add(bouton, gbc);
            return panel;
        }
    Une idée?

    Merci beaucoup :-)

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il suffit de modifier l'anchor de tes deux boutons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    gbc.gridx = 2;
    gbc.gridy = 2;
    gbc.anchor = GridBagConstraints.SOUTH;
    panel.add(boutonAdd, gbc);
     
    gbc.insets = new Insets(0, 10, 10, 10);
     
    gbc.gridx = 2;
    gbc.gridy = 3;
    gbc.anchor = GridBagConstraints.NORTH;
    panel.add(boutonRemove, gbc);

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Re,

    Ok, je garde la solution du changement d'ancre alors.

    Merci :-)

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

Discussions similaires

  1. Probleme de join avec result dans une datatable
    Par garciajulien dans le forum Linq
    Réponses: 0
    Dernier message: 02/03/2010, 14h35
  2. [linker]Probleme avec SDL dans une application Ogre3D
    Par smarties dans le forum Visual C++
    Réponses: 2
    Dernier message: 15/01/2007, 14h29
  3. Probleme ajout label dans une fenetre
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 05/11/2005, 17h51
  4. Le dessin avec VC dans une fenetre windows
    Par ccensam dans le forum MFC
    Réponses: 3
    Dernier message: 03/11/2005, 23h40
  5. Probleme d'affichage d'image dans une fenetre
    Par cgregueusse dans le forum MFC
    Réponses: 1
    Dernier message: 03/08/2005, 11h08

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