JSeparator zeigen gewohnt mit GridBagLayout
-
19-09-2019 - |
Frage
Ich möchte eine vertikale JSeparator zwischen zwei Komponenten hinzuzufügen, um einen GridBagLayout verwenden. Der Code, den ich habe, ist wie folgt:
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);
}
Aber der JSeperator zeigt nicht, irgendwelche Ideen?
Danke
Lösung
Sie könnten versuchen, die bevorzugte Breite für den Separator zu setzen:
sep.setPreferredSize(new Dimension(5,1));
Dann machen GridBagLayout all verfügbare Höhe für den Separator aufbrauchen:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
Andere Tipps
Genommen von Sun Leitfaden für JSeparator
:
In den meisten Implementierungen eine vertikale Separator weist eine bevorzugte Höhe von 0, und ein horizontaler Separator weist eine bevorzugte Breite von 0. Dies bedeutet, a Separator ist nicht sichtbar, es sei denn, Sie entweder eingestellt seine bevorzugte Größe oder setzen es unter der Kontrolle eines Layouts Manager wie Border oder BoxLayout, die es erstreckt sich zu füllen ihr zur Verfügung stehenden Anzeigebereich.
Der vertikale Trenn tut ein bisschen haben die Breite (und die horizontal ein wenig Höhe), so sollten Sie etwas Platz sehen wobei der Separator. Allerdings ist die Ist Trennlinie nicht gezeichnet es sei denn, die Breite und Höhe sind beide Nicht-Null.
Vielleicht sollten Sie mit der rechten Randbedingungen festgelegt?