首先,我们有一个JPanel
。由于其环境和上下文,其宽度可以变化。它包含一些按垂直顺序排列的组件(为简单起见,例如JLabels
)。此组件的某些内容宽度太大而无法显示:
在我们有很多项目之前,这非常有效。因此,我们将面板放入带有JScrollPane
标志的HORIZONTAL_SCROLLBAR_NEVER
中。这是我的预期结果:
但是实际上还有其他事情发生。带有长文本的第二个标签的大小不是强制性的,并且面板会超出视口:
什么是最简单的正确解决方案?
注释
实际上,使用各种各样的组件可能会更加复杂,因此使用JList
是不合适的解决方案。
我使用默认组件和默认设置。我想找到一种显式设置最少的解决方案。
最佳答案
您需要为面板实现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;
}