GridBagLayout imbottitura
-
22-09-2019 - |
Domanda
Sto usando un GridBagLayout
a (attualmente) di visualizzazione di due righe. Sono consapevole questo layout è eccessivo per questo compito, ma sto cercando di imparare a usarlo. Il problema è che ho aggiunto i due pannelli ai due file separati e non v'è un enorme spazio intorno al contenuto (vedere l'immagine e il codice di seguito):
alt text 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);
}
Soluzione
Purtroppo, con GridBagLayout
, se il contenuto non riempiono l'intero contenitore che è in, si centrerà automaticamente tutti i suoi contenuti nel contenitore. È per questo che si stanno ottenendo davvero un grande divario.
Ci sono essenzialmente due modi per risolvere questo:
- Il modo più duro: Fiddle con il
GridBagConstraints
. Ho avuto un successo limitato con questo quando si cerca di evitare il comportamento di centro-ing. - Il modo più semplice:. Mettere il
GridBagLayout
interno di unFlowLayout
, e quindi impostare l'allineamento delFlowLayout
a in alto a sinistra, o qualsiasi altra cosa che si desidera
ho chiesto, e ha risposto, questa domanda io stesso qualche volta la settimana scorsa.
Quindi nel tuo caso si sta aggiungendo il vostro panel1
e middlePanel
direttamente al JFrame (?), Con un GridBagLayout
JFrame (GridBagLayout)
- panel1
- middlePanel
Vorrei suggerire questa struttura alternativa, invece, per sbarazzarsi di tutto lo spazio extra (e l'allineamento al centro e, se vi piace).
JFrame (FlowLayout)
- JPanel (GridBagLayout)
- panel1
- middlePanel
HTH
Altri suggerimenti
Usa
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;
JavaDoc per weightx
/ weighty
dice:
Specifica come distribuire spazio orizzontale / verticale.
JavaDoc per fill
:
Questo campo è utilizzato quando l'area di visualizzazione del componente è più grande del formato richiesto del componente. Determina se ridimensionare il componente, e se sì, come.