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