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 一起显示的主要内容,如果未能解决你的问题,请参考以下文章

Java界面

Android View 不会通过滑动手势滚动,也不会滚动。将 ListView 与 ArrayAdapter 一起使用

redis slave不会与master同步

Android 应用程序不会启动,也不会列出错误/警告。使用片段和问题似乎与 var args = ViewFragmentArgs

玩家与地板碰撞时不会移动

mdb与gdb转化会不会影响图形