JSeparator 不会与 GridBagLayout 一起显示
Posted
技术标签:
【中文标题】JSeparator 不会与 GridBagLayout 一起显示【英文标题】:JSeparator wont show with GridBagLayout 【发布时间】:2011-01-26 09:53:46 【问题描述】:我想使用 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 没有显示,有什么想法吗?
谢谢
【问题讨论】:
JSeperator 确实“显示”了,如果您注释掉 add(sep,gbc),组件之间有一条细线会消失 【参考方案1】:您可以尝试设置分隔符的首选宽度:
sep.setPreferredSize(new Dimension(5,1));
然后,让 GridBagLayout 用尽分隔符的所有可用高度:
gbc.fill = GridBagConstraints.VERTICAL;
gbc.weighty = 1;
【讨论】:
【参考方案2】:摘自 Sun 的指南JSeparator
:
在大多数实现中,垂直 分隔符的首选高度为 0, 一个水平分隔符有一个 首选宽度为 0。这意味着 分隔符是不可见的,除非你 要么设置它的首选大小或放 它在一个布局的控制下 管理器,例如 BorderLayout 或 BoxLayout 将其拉伸以填充 其可用的显示区域。
垂直分隔符确实有点 宽度(和水平的一点 高度),所以你应该看到一些空间 分隔符在哪里。然而 没有画出实际的分界线 除非宽度和高度都是 非零。
也许你应该设置正确的约束?
【讨论】:
在网格包布局下有什么办法可以让它伸展到窗口的高度吗?以上是关于JSeparator 不会与 GridBagLayout 一起显示的主要内容,如果未能解决你的问题,请参考以下文章
Android View 不会通过滑动手势滚动,也不会滚动。将 ListView 与 ArrayAdapter 一起使用
Android 应用程序不会启动,也不会列出错误/警告。使用片段和问题似乎与 var args = ViewFragmentArgs