JSeparator mostrare wont con GridBagLayout
-
19-09-2019 - |
Domanda
Voglio aggiungere un JSeparator verticale tra due componenti utilizzando un GridBagLayout. Il codice che ho è il seguente:
public MainWindowBody(){
setLayout(new GridBagLayout());
JPanel leftPanel = new InformationPanel();
JPanel rightPanel = new GameSelectionPanel();
JSeparator sep = new JSeparator(JSeparator.VERTICAL);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.NORTH;
add(leftPanel,gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.VERTICAL;
add(sep,gbc);
gbc.gridx = 2;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.NONE;
add(rightPanel,gbc);
}
Ma la JSeperator non mostra, tutte le idee?
Grazie
Soluzione
Si potrebbe provare a impostare la larghezza preferito per il separatore:
sep.setPreferredSize(new Dimension(5,1));
Quindi, fanno GridBagLayout utilizzare su tutta l'altezza disponibile per il separatore:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
Altri suggerimenti
Tratto da Sun Guida per JSeparator
:
Nella maggior parte delle implementazioni, verticale separatore ha un'altezza desiderata di 0, ed un separatore orizzontale ha un larghezza preferita di 0. Questo significa separatore non è visibile a meno che non o impostare la dimensione preferita o mettere in sotto il controllo di un layout gestore come BorderLayout o BoxLayout che si estende per riempire la sua area di visualizzazione disponibile.
Il separatore verticale ha un po ' di larghezza (e l'orizzontale un po 'di altezza), così si dovrebbe vedere un pò di spazio in cui il separatore è. in ogni caso, il linea di divisione effettivo non è disegnata a meno che la larghezza e l'altezza sono entrambi diverso da zero.
Forse si dovrebbe impostare vincoli giusti?