JSeparator在GridBagLayout中无法显示

12

我想在使用GridBagLayout布局的两个组件之间添加一个垂直JSeparator。 我有以下代码:

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不显示,有什么想法吗?

谢谢


1
JSeperator实际上是“显示”的,组件之间有一条细线,如果您注释掉add(sep,gbc),它将消失。 - Thomas
2个回答

17

您可以尝试为分隔符设置首选宽度:

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

然后,让 GridBagLayout 在分隔符中使用所有可用的高度:

gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;

7
摘自Sun公司的JSeparator指南:
在大多数实现中,垂直分隔符的首选高度为0,水平分隔符的首选宽度为0。这意味着分隔符不可见,除非您设置其首选大小或将其放置在像BorderLayout或BoxLayout这样的布局管理器的控制下,以拉伸它以填充可用的显示区域。
垂直分隔符确实有一点宽度(水平分隔符有一点高度),因此您应该看到分隔符所在的一些空间。但是,只有当宽度和高度都为非零时,才会绘制实际的分隔线。
也许您应该设置正确的约束条件?

1
在 GridBag 布局下,有没有办法让它拉伸到窗口的高度? - Aly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接