rembourrage GridBagLayout
-
22-09-2019 - |
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);
}
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:
- La dure: Fiddle avec le
GridBagConstraints
. J'ai eu un succès limité avec ce en essayant d'éviter le comportement du centre-ing. - La façon facile. Mettez le
GridBagLayout
à l'intérieur d'unFlowLayout
, puis définir l'alignement duFlowLayout
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.