JSeparator对象不会显示使用GridBagLayout的
-
19-09-2019 - |
题
我要添加使用的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不显示,任何想法?
由于
解决方案
您可以尝试设置首选宽度隔板:
sep.setPreferredSize(new Dimension(5,1));
然后,使的GridBagLayout使用所有可用的高度为隔膜:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
其他提示
来自的 Sun的强>指南JSeparator
:
在大多数实现中,一个垂直 分离器具有为0的优选高度, 和水平隔板具有 的0。优选的宽度这意味着 隔膜,没有,除非你可见 任一组其优选大小或放 它在一个布局的控制下 经理如BorderLayout的或 BoxLayout的,绵延它填补 其可用显示区域。
在垂直隔板确实有一个位 宽度(和水平位的 高),所以你应该看到一些空间 其中分离器是。但是,那 实际的分割线不绘制 除非宽度和高度均为 非零的。
也许你应该设定正确的约束?
不隶属于 StackOverflow