Привычка JSeparator показывает с GridBagLayout

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

Спасибо

7
задан Aly 11 March 2010 в 14:32
поделиться

2 ответа

Вы можете попробовать установить предпочтительную ширину для разделителя:

sep.setPreferredSize(new Dimension(5,1));

Затем заставьте GridBagLayout использовать всю доступную высоту для разделителя:

gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
13
ответ дан 6 December 2019 в 09:19
поделиться

Взято из руководства Sun для JSeparator :

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

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

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

7
ответ дан 6 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: