我想使用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没有显示任何想法?
由于
答案 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延伸它填充 它的可用显示区域。
垂直分隔符确实有点 宽度(和水平的一点) 高度),所以你应该看到一些空间 分隔符在哪里。然而 未绘制实际分界线 除非宽度和高度都是 非零的。
也许你应该设置正确的约束?