JSeparator не будет показываться с GridBagLayout - PullRequest
7 голосов
/ 11 марта 2010

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

Спасибо

Ответы [ 2 ]

13 голосов
/ 11 марта 2010

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

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

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

gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
6 голосов
/ 11 марта 2010

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

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

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

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

...