Question

J'utilise un GridBagLayout à (actuellement) deux lignes d'affichage. Je sais ce schéma est surpuissant pour cette tâche, mais essaie d'apprendre comment l'utiliser. Le problème est que j'ai ajouté les deux panneaux aux deux rangées séparées et il y a un énorme fossé autour du contenu (voir l'image et le code ci-dessous): texte alt http://www.imagechicken.com/uploads/1264533379009864500.png

Image background;
    public Table(){
        super();
        ImageIcon ii = new ImageIcon(this.getClass().getResource("pokerTableV2.png"));
        background = ii.getImage();
        setSize(Constants.FRAME_WIDTH, Constants.TABLE_HEIGHT);

        setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.fill = GridBagConstraints.HORIZONTAL;

        JButton button = new JButton("hello world");
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(800,100));
        panel1.add(button, BorderLayout.CENTER);
        panel1.setBackground(Color.yellow);
        add(panel1, constraints);

        constraints.gridx = 0;
        constraints.gridy = 1;

        JPanel middlePanel = new JPanel();
        middlePanel.setPreferredSize(new Dimension(800,350));
        middlePanel.add(button, BorderLayout.CENTER);
        middlePanel.setBackground(Color.blue);
        add(middlePanel, constraints);


    }
Était-ce utile?

La solution

Malheureusement, avec GridBagLayout, si le contenu ne remplissent pas l'ensemble du récipient qu'il est, il centrer automatiquement son contenu dans son conteneur. C'est la raison pour laquelle vous obtenez un écart vraiment important.

Il existe essentiellement deux façons de corriger cela:

  1. La dure: Fiddle avec le GridBagConstraints. J'ai eu un succès limité avec ce en essayant d'éviter le comportement du centre-ing.
  2. La façon facile. Mettez le GridBagLayout à l'intérieur d'un FlowLayout, puis définir l'alignement du FlowLayout au coin supérieur gauche, ou tout ce que vous souhaitez

J'ai demandé, et répondu, cette question moi-même quelque temps la semaine dernière.

Dans votre cas, vous ajoutez directement votre panel1 et middlePanel au JFrame (?), Avec un GridBagLayout

JFrame (GridBagLayout)
 - panel1
 - middlePanel

Je suggère cette autre structure plutôt que, pour se débarrasser de tout l'espace supplémentaire (et l'alignement du centre aussi bien, si vous le souhaitez).

JFrame (FlowLayout)
 - JPanel (GridBagLayout)
   - panel1
   - middlePanel

HTH

Autres conseils

Utilisez

constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;

JavaDoc weightx / weighty dit:

  

Indique comment répartir l'espace horizontal supplémentaire / vertical.

JavaDoc fill:

  

Ce champ est utilisé lorsque la zone d'affichage du composant est plus grande   que la taille requise du composant. Il détermine si   redimensionner le composant, et si oui, comment.

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