首先,我们有JPanel
。由于其环境和背景,其宽度可以变化。它以垂直顺序包含一些组件(例如,JLabels
,为简单起见)。这些组件的某些内容宽度太大而无法显示:
这很有效,直到我们有很多项目。因此,我们将面板放入JScrollPane
并带有HORIZONTAL_SCROLLBAR_NEVER
标记。这是我的预期结果:
但实际上还有其他事情发生了。不强制使用长文本的第二个标签的大小,并且面板在视口之外生长:
最简单的正确解决方案是什么?
JList
不是一个合适的解决方案。答案 0 :(得分:5)
您需要为面板实施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;
}