Question

Je cherche à dessiner une barre latérale pour un projet que je travaille. J'ai choisi d'utiliser GridBagLayout parce que je suis devenu frustré par les limites de BoxLayout. Quelqu'un pourrait-il aider à expliquer ce que je fais mal. Ce que je veux pour la barre latérale pour contenir deux JPanels. Le code que je les place au milieu de la barre latérale au lieu de haut. Quelqu'un pourrait-il expliquer ce que je suis absent ici.

    JPanel sideBar = new JPanel();
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
    sideBar.setLayout(new GridBagLayout());


    JPanel optionBar = new JPanel();
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
    optionBar.setLayout(new GridBagLayout());


    JPanel buttonBar = new JPanel();
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
    buttonBar.setLayout(new GridBagLayout());


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.ipady = 5;
    c.insets = new Insets(10,0,0,0);


    JButton simplify;
    simplify = new JButton("Open");
    simplify.addActionListener( this.listener );
    c.gridy = 0;
    buttonBar.add(simplify, c);

    JButton mergeButton;
    mergeButton = new JButton("Close");
    mergeButton.addActionListener( this.listener );
    c.gridy = 1;
    buttonBar.add(mergeButton, c);

    JButton splitButton;
    splitButton = new JButton("Merge");
    splitButton.addActionListener( this.listener );
    c.gridy = 2;
    buttonBar.add(splitButton, c);

    c.insets = new Insets(0,5,5,5);
    c.gridy = 0;
    sideBar.add(optionBar, c);

    c.gridy = 1;
    c.ipadx = 70;
    sideBar.add(buttonBar, c);

    return(sideBar);
Était-ce utile?

La solution

GridBagLayout n'allouer suffisamment d'espace vertical qu'un composant nécessite, en laissant le reste vide. Je vous attends voyez vos composants de la barre de côté centrés verticalement?

Afin de « pousser » les composants, vous devez définir un poids vertical. Si vous définissez la contrainte de weighty à 1,0 sur votre dernier composant, il faudra tout l'espace vertical restant pour ce composant et pousser le reste vers le haut. (Vous pouvez aussi avoir besoin d'ancrer ce dernier panneau à GridBagConstraints.NORTH).

Essayez c.weighty = 1.0 avant sideBar.add(buttonBar, c);

Autres conseils

Si vous connaissez / plus à l'aise avec le langage HTML, vous pouvez utiliser table2gridbag . Il est un petit outil de console qui prend une description de mise en page (tableau HTML) et se traduit que dans une description équivalente de mise en page pour configurer le gestionnaire GridBagLayout

  

Le code que je les ai place   à mi-chemin en bas de la barre latérale au lieu de   la partie supérieure.

Eh bien, vous devez commencer par lire le tutoriel Swing pour apprendre à utiliser les gestionnaires de mise en page correctement. BoxLayout est beaucoup plus facile que GridBagLayout parce que vous n'avez pas à apprendre comment spécifier des contraintes. Mais si vous voulez utiliser GridBagLayout, alors lisez la section intitulée « Comment utiliser GridBagLayout ». Vous voudrez peut-être de se concentrer sur la section traitant des contraintes « weightx et de poids ». Sur la base de mes connaissances limitées qui devraient aider à résoudre le problème.

En outre, lors de l'utilisation des gestionnaires de mise en page ne pas utiliser setBounds () ou setSize ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top