垂直JScrollPane切断了孩子们的右侧

Dáv*_*áth 1 java swing jscrollpane

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

使用JPanel溢出

这很有效,直到我们有很多项目.因此,我们将面板放入JScrollPane带有HORIZONTAL_SCROLLBAR_NEVER标志的面板中.这是我的预期结果:

JScrollPane的预期结果

但事实上其他事情发生了.不强制使用长文本的第二个标签的大小,并且面板在视口之外生长:

实际上发生了

什么是最简单的正确解决方案?

评论

  • 实际上,对于各种各样的组件,这可能会更复杂,因此使用a JList不是一个合适的解决方案.
  • 我使用默认设置的默认组件.我想找到一个具有最少显式设置的解决方案.

cam*_*ckr 5

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

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

例如,您可以使用:

ScrollablePanel panel = new ScrollablePanel(...);
panel.setScrollableWidth( ScrollablePanel.ScrollableSizeHint.FIT );
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您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;
}
Run Code Online (Sandbox Code Playgroud)