Я хочу добавить вертикальный JSeparator между двумя компонентами с помощью GridBagLayout. Код, который я имею, следующие:
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);
}
Но JSeperator не показывает, никакие идеи?
Спасибо
Вы можете попробовать установить предпочтительную ширину для разделителя:
sep.setPreferredSize(new Dimension(5,1));
Затем заставьте GridBagLayout использовать всю доступную высоту для разделителя:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
Взято из руководства Sun для JSeparator
:
В большинстве реализаций вертикальный разделитель имеет предпочтительную высоту 0, и горизонтальный разделитель имеет предпочтительную ширину , равную 0. Это означает, что разделитель не отображается, если вы не установите его предпочтительный размер или не поместите под управление менеджером макета, например BorderLayout или BoxLayout, который растягивает его, чтобы заполнить доступную область отображения.
Вертикальный разделитель имеет немного ширины (а горизонтальный немного высоты), поэтому вы должны увидеть некоторое пространство на месте разделителя. Однако фактическая разделительная линия не проводится , если ширина и высота обе не равны нулю.
Может быть, вам следует установить правильные ограничения?