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 :

Utiliser plusieurs layout différents 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 Utiliser plusieurs layout différents dans une fenetre
    Bonjour,

    J'ai un soucis de disposition d'éléments dans ma fenetre qui m'oblige à utiliser plusieurs layout différents, mais je n'arrive pas à bien m'y prendre.

    En fait, j'ai :
    - un JLabel suivi d'un JComboBox
    - un JTextArea
    - une série de JButton.

    A cause de la largeur du JTextArea, il y a trop d'espacement entre les éléments de ma colonne 0 et 1 (donc entre mon JLabel et mon ComboBox, ainsi qu'entre mon 1er et second bouton).

    Actuellement, j'utilise GridBagLayout comme ceci:

    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
     private JPanel buildContentPane() {
     
            JPanel panel = new JPanel();
            panel.setLayout(new GridBagLayout());
     
            DefaultListModel listModel = new DefaultListModel();
     
            JLabel typeRulesLabel = new JLabel("Type des règles:");
            JComboBox typeRulesValue = new JComboBox();
     
            for (Document document : ruleBundle.getListDocuments()){
                typeRulesValue.addItem(document.getType());
            }
     
            if (ruleBundle.getListRules().size() > 0) {
                for (RuleModel rule : ruleBundle.getListRules()) {
                    listModel.addElement(rule);
                }
     
                dataList = new JList(listModel);
                dataList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
                dataList.setDragEnabled(true);
                dataList.setTransferHandler(new ListTransferHandler(ruleBundle));
     
                JScrollPane scrollPane = new JScrollPane(dataList);
                scrollPane.setPreferredSize(new Dimension(400, 300));
     
                JButton bouton1 = new JButton(new AddRuleAction(ruleBundle, "Ajouter une règle"));
                JButton bouton2 = new JButton(new EditRuleAction(this, ruleBundle, "Editer la règle"));
                JButton bouton3 = new JButton(new RemoveRuleAction(this, ruleBundle, "Supprimer la règle"));
     
                JButton bouton4 = new JButton(new SaveRulesListAction(ruleBundle, "Sauvegarder la liste des règles"));
                JButton bouton5 = new JButton(new WritedRuleFileAction(this, ruleBundle, "Ecrire les nouvelles règles dans un fichier"));
     
     
                GridBagConstraints gbc = new GridBagConstraints();
     
                gbc.insets = new Insets(0, 0, 4, 0);
                gbc.anchor = GridBagConstraints.WEST;
                gbc.gridx = 0;
                gbc.gridy = 0;
                panel.add(typeRulesLabel, gbc);
     
                gbc.insets = new Insets(0, 4, 4, 0);
                gbc.anchor = GridBagConstraints.WEST;
                gbc.gridx = 1;
                gbc.gridy = 0;
                panel.add(typeRulesValue, gbc);
     
                gbc.insets = new Insets(0, 4, 0, 0);
                gbc.gridx = 0;
                gbc.gridy = 1;
                panel.add(scrollPane, gbc);
     
                gbc.gridwidth = 1;
                gbc.insets = new Insets(4, 0, 4, 4);
     
                gbc.gridx = 0;
                gbc.gridy = 2;
                panel.add(bouton1, gbc);
     
                gbc.insets = new Insets(4, 4, 4, 4);
                gbc.gridx = 1;
                gbc.gridy = 2;
                panel.add(bouton2, gbc);
     
                gbc.gridx = 2;
                gbc.gridy = 2;
                panel.add(bouton3, gbc);
     
                gbc.gridx = 3;
                gbc.gridy = 2;
                panel.add(bouton4, gbc);
     
                gbc.gridx = 4;
                gbc.gridy = 2;
                panel.add(bouton5, gbc);
            }
     
            return panel;
        }
    L'utilisation d'anchor est top approximative je trouve.

    En fait, j'e pense que le mieux serait d'avoir 3 panels (un pour chaque ligne), de définir leur layout approprié et de les rajouter dans un panel principal.

    Qu'en pensez-vous?

    Et dans ce cas, comment faire pour que ces panels soient bien disposés verticalement entre eux?

    Autrement dit controler la disposition d'un panel par rapport à l'autre.

    Merci :-)

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Comment contrôler la disposition des panels le uns par rapport aux autres ?... par un layout, justement. Si je comprends bien, tu auras 3 panneaux, chacun avec son layout, plus le panneau général, avec son propre layout, et qui contiendra les 3 panneaux.

  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,

    J'ai essayé en utilisant plusieurs layout de faire une fenetre contenant:
    - une table constituée de deux colonnes
    - deux boutons à la droite de cette table disposés verticalement l'un de l'autre
    - en dessous de cette table, un label suivi d'un champ texte suivi d'un bouton

    Mais malheuresement, ca ne marche pas, il me met tout sur la même ligne.

    Une idée, pour pouvoir avoir cette disposition avec mes quatres panels?

    Voila ce que j'ai fait (j'ai mis en gras, les principales lignes):

    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
    private JPanel buildContentPane() {        
    
            JPanel panelTable = new JPanel();
            panelTable.setLayout(new FlowLayout());
            String[] columnNames = {"Type de document", "Chemin du fichier"};
            List<Document> documents = new ArrayList<Document>();
    
            DocTableModel model = new DocTableModel(columnNames, documents);
            documentTable = new JTable(model);
    
            // On définit un éditeur sur la 2ème colonne
            documentTable.getColumnModel().getColumn(1).setCellEditor(new FileChooserCellEditor(this));
    
            TableUtil.initColumnSizes(documentTable, 600);
            documentTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    
            JScrollPane scrollPaneTable = new JScrollPane(documentTable);
            panelTable.add(scrollPaneTable);
            
            
            JPanel panelBouttons = new JPanel();
            GridLayout gridLayout1 = new GridLayout(2,1);
            panelBouttons.setLayout(gridLayout1);
            JButton boutonAdd = new JButton(new AddDocumentAction(this, documentTable, "+"));
            JButton boutonRemove = new JButton(new RemoveDocumentAction(this, documentTable, "-"));
            panelBouttons.add(boutonAdd);
            panelBouttons.add(boutonRemove);
            
            
            
         JPanel panelOther = new JPanel();
            GridBagLayout gridBagLayout2 = new GridBagLayout();
            panelOther.setLayout(gridBagLayout2);
            
            JLabel dslPathNameLabel = new JLabel("Fichier de grammaire utilisé");
            JTextField dslPathNameValue = new JTextField();
            JButton loadDSLButton = new JButton("Parcourir");
            dslPathNameValue.setColumns(30);
            
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.insets = new Insets(0, 4, 0, 10);
            gbc.gridx = 0;
            gbc.gridy = 0;
            panelOther.add(dslPathNameLabel, gbc);
    
            gbc.insets = new Insets(0, 10, 0, 4);
            gbc.gridx = 0;
            gbc.gridy = 1;
            panelOther.add(dslPathNameValue);
            
            gbc.insets = new Insets(0, 4, 0, 0);
            panelOther.add(loadDSLButton);
            
            
            
            JPanel panel = new JPanel();
            GridBagLayout gridBagLayout1 = new GridBagLayout();
            panel.setLayout(gridBagLayout1);
            
            GridBagConstraints gbc2 = new GridBagConstraints();
            gbc2.insets = new Insets(0, 0, 0, 0);
            gbc2.gridwidth = 2;
            gbc2.gridx = 0;
            gbc2.gridy = 0;
            panel.add(panelTable);
            
            gbc2.gridx = 1;
            gbc2.gridy = 0;
            gbc2.gridwidth = 1;
            panel.add(panelBouttons);
            
            gbc2.gridx = 0;
            gbc2.gridy = 1;
            gbc2.gridwidth = 1;
            panel.add(panelOther);
    
            return panel;
        }

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il est toujours mieux de réfléchir au niveau du sens ou de la fonction des choses que tu veux disposer à l'écran, non en termes au dessus ou au dessous etc.

    Bon, comme y fô pas être trop pointilleux, je vais quand même te dire. Je reste volontairement avec un layout simple du jdk.

    1. un panneau racine, avec BoxLayout horizontal, et deux panneaux : gauche et droite.
    2. panneau gauche : BoxLayout vertical avec ta table et un panneau de dessous de table
    3. panneau de dessous de table : BoxLayout horizontal, contenant label, champ texte et bouton
    4. panneau droite : BoxLayout vertical avec les deux boutons.

    Et voilà, tout est fait avec un BoxLayout et un jeu de panneaux. Pas forcément hyper top au niveau design (attention que les alignements sont prises de tête avec ce layout), mais efficace.

  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,

    Ca marche très bien par contre, j'ai du mal à voir comment avec ce layout, gérer l'espace horizontal ou vertical si je veux le varier entre les différents composants d'un layout.

    PS: Finalement en gardant toute la logique des panels, et en réadaptant certains panels avec des GridBagLayout, j'ai réussi à résoudre mon pb vu que je sais régler tous ces paramètres là avec ce layout.

    Merci :-)

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

Discussions similaires

  1. Utiliser deux dll différentes dans une page aspx
    Par Sylvain_57 dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 21/03/2011, 12h31
  2. Comment faire pour utiliser plusieurs fonctions logiques dans une condition ?
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/11/2010, 11h37
  3. utiliser plusieurs police différentes dans 1 mémo
    Par the_magik_mushroom dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/03/2006, 16h28
  4. Pour utiliser MFC et directX9 dans une fenetre dialogue
    Par Mathieu008_67 dans le forum DirectX
    Réponses: 2
    Dernier message: 17/11/2005, 19h09

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