JSeparator不会显示GridBagLayout

时间:2010-03-11 14:32:57

标签: java user-interface swing gridbaglayout

我想使用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没有显示任何想法?

由于

2 个答案:

答案 0 :(得分:13)

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

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

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

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

答案 1 :(得分:6)

取自{strong> Sun的指南JSeparator

  

在大多数实现中,垂直   separator的首选高度为0,   并且水平分隔符具有   首选宽度为0.这意味着a   除非你,否则看不到分隔符   设置其首选大小或放置   它在布局的控制下   经理如BorderLayout或   BoxLayout延伸它填充   它的可用显示区域。

     

垂直分隔符确实有点   宽度(和水平的一点)   高度),所以你应该看到一些空间   分隔符在哪里。然而   未绘制实际分界线   除非宽度和高度都是   非零的。

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