11

我想使用 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 没有显示,有什么想法吗?

谢谢

4

2 回答 2

17

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

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

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

gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
于 2010-03-11T14:56:38.503 回答
7

摘自Sun 的指南JSeparator

在大多数实现中,垂直分隔符的首选高度为 0,水平分隔符的首选宽度为 0。这意味着分隔符不可见,除非您设置其首选大小或将其置于布局管理器的控制之下例如 BorderLayout 或 BoxLayout 将其拉伸以填充其可用显示区域。

垂直分隔符确实有一点宽度(水平分隔符有一点高度),所以您应该看到分隔符所在的一些空间。但是,除非宽度和高度都非零,否则不会绘制实际的分界线。

也许你应该设置正确的约束?

于 2010-03-11T14:43:53.787 回答