垂直 JScrollPane 切断其 children 的右侧

Vertical JScrollPane cuts off its children's right side

首先,我们有一个JPanel。它的宽度可以根据其环境和背景而变化。它包含一些垂直顺序的组件(例如 JLabels,为简单起见)。此组件的某些内容宽度太大而无法显示:

在我们有很多项目之前,这非常有效。因此,我们将面板放入带有 HORIZONTAL_SCROLLBAR_NEVER 标志的 JScrollPane 中。这是我的预期结果:

但实际上发生了其他事情。没有强制第二个带有长文本的标签的大小,并且面板超出了视口:

最简单的正确解法是什么?

评论

您需要为您的面板实现 Scrollable 接口,以强制面板的宽度适合滚动窗格的视口。

一个简单的方法是使用 Scrollable Panel.

例如您可以使用:

ScrollablePanel panel = new ScrollablePanel(...);
panel.setScrollableWidth( ScrollablePanel.ScrollableSizeHint.FIT );

编辑:

如果您自己实现 Scrollable 接口,最简单的实现可能类似于:

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

@Override
public int getScrollableUnitIncrement(Rectangle visible, int orientation, int direction)
{
    return 1;
}

@Override
public int getScrollableBlockIncrement(Rectangle visible, int orientation, int direction)
{
    return 20;
}

@Override
public boolean getScrollableTracksViewportWidth()
{
    return true;
}

@Override
public boolean getScrollableTracksViewportHeight()
{
    return false;
}