Вопрос

Я хочу добавить вертикальный 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;

Другие советы

Взято из Солнечный руководство для JSeparator:

В большинстве реализаций вертикальный разделитель имеет предпочтительную высоту 0, а горизонтальный разделитель имеет предпочтительную ширину 0.Это означает, что разделитель не будет виден, если вы не установите его предпочтительный размер или не поместите его под управление layout manager, такого как BorderLayout или BoxLayout, который растягивает его, чтобы заполнить доступную область отображения.

Вертикальный разделитель имеет немного ширины (а горизонтальный немного высоты), поэтому вы должны увидеть некоторое пространство там, где находится разделитель.Однако фактическая разделительная линия не рисуется если только ширина и высота не равны ненулевым значениям.

Может быть, вам следует установить правильные ограничения?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top