【问题标题】:BorderLayout: Nested CENTER Panel Grows But does Not Resize Outer PanelBorderLayout:嵌套的 CENTER 面板增长但不调整外部面板的大小
【发布时间】:2011-04-04 07:05:07
【问题描述】:

我有一个实现 Scrollable 并使用 BorderLayout 的主 JPanel。它包含一个 NORTH 只读 JEditorPane、一个带有 FlowLayout 的 CENTER JPanel,其中 JButton 是动态添加的,还有一个 SOUTH JLabel,所有这些都按此顺序添加。当 CENTER JPanel 中添加了许多 JButton 时,按钮会自动换行:问题是 CENTER JPanel 占用的超过一行的垂直空间刚好与 SOUTH JLabel 重叠,不会导致整个 JPanel 动态增长或显示垂直滚动条。另一方面,当向 NORTH JEditorPane 添加足够多的文本以使其换行到下一行时,它会按我预期的方式运行,并将 CENTER JPanel 向下推并显示垂直滚动条。

这里主要的 JPanel Scrollable 实现:

public Dimension getPreferredScrollableViewportSize() {
    return getPreferredSize();
}

public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
    return Math.max(visibleRect.height * 9 / 10, 1);
}

public boolean getScrollableTracksViewportHeight() {
    if (getParent() instanceof JViewport) {
        JViewport viewport = (JViewport) getParent();
        return getPreferredSize().height < viewport.getHeight();
    }
    return false;
}

public boolean getScrollableTracksViewportWidth() {
    return true;
}

public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
    return Math.max(visibleRect.height / 10, 1);
}

我做错了什么?如何让 CENTER JPanel 将 SOUTH JLabel 向下推以增大整个主 JPanel?

【问题讨论】:

    标签: java swing


    【解决方案1】:

    问题是当按钮被包裹到下一行时,FlowLayout 不会重新计算首选大小。

    您应该可以使用WrapLayout

    WrapLayout 扩展 FlowLayout 并在组件换行到新行时设置适当的首选大小。

    【讨论】:

    • 谢谢,这有助于扩大面板并触发垂直滚动条。但是,当我向下滚动时,面板及其按钮会悬停在 ScrollPane 上方的内容上,而不是消失在其边框后面:screencast.com/t/MTUyOGRmY
    • 首先尝试使用没有自定义实现 Scrollable 接口的常规面板的代码。如果您仍有问题,请发布您的 SSCCE (sscce.org) 以证明该问题。我们无法从图片中猜出您的代码是什么样的。
    • 好的,谢谢。仅供参考 - 经过进一步调查,只有按钮没有消失,当我将面板不透明设置为 true 时,我可以看到面板本身正在滚动窗格的边界后面消失。当我删除自定义 Scrollable 实现时同样的问题。
    • 哈哈哈,我发现按钮的问题是我正在使用的代码使用 java.awt.Button 而不是 JButton!但是您使用 WrapLayout 的建议是我最初问题的解决方案,所以,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多