Java Swing-JScrollPane将视口宽度调整为JScrollPane宽度

Java Swing-JScrollPane将视口宽度调整为JScrollPane宽度,java,swing,layout,scroll,jscrollpane,Java,Swing,Layout,Scroll,Jscrollpane,我一直在尝试缩小JScrollPane的内容宽度,例如,我将水平滚动条策略设置为永不,但结果是没有滚动条出现,内容不再显示 我希望它看起来是这样的: 这是我的MCVE: final JPanel panel = new JPanel( new MigLayout( new LC().flowX().gridGapX( "20" ).fill() ) ); panel.add( new JXTitledSeparator( "Test" ), new CC().growX().spanX()

我一直在尝试缩小
JScrollPane
的内容宽度,例如,我将
水平滚动条策略设置为
永不
,但结果是没有滚动条出现,内容不再显示

我希望它看起来是这样的:

这是我的MCVE:

final JPanel panel = new JPanel( new MigLayout( new LC().flowX().gridGapX( "20" ).fill() ) );

panel.add( new JXTitledSeparator( "Test" ), new CC().growX().spanX().wrap() );
panel.add( new JLabel( "Shrink me please!" ), new CC().minWidth( "1" ) );
panel.add( new JLabel( "Never shall anyone ever be able to shrink me." ), new CC().growX() );

final JScrollPane scrollPane = new JScrollPane( panel );
scrollPane.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );

final JFrame frame = new JFrame( "Test" );
frame.getContentPane().add( scrollPane );
frame.setVisible( true );
frame.pack();
遗憾的是,我不知道如何做到这一点,
JScrollPane
JViewport
没有提供任何可能有用的方法,
JScrollPane
本身也没有


此外,我已经尝试使用
BoxLayout
FlowLayout
而不是
migloayout
来实现同样的效果,以验证
migloayout
不是问题的原因。

尝试设置收缩标签的最大宽度。
您不需要滚动条吗?
如果需要根据需要使用滚动条从滚动窗格中

final JFrame frame = new JFrame( "Test" );
frame.setLayout(new BorderLayout());
frame.add( scrollPane , BorderLayout.CENTER);
frame.pack();
frame.setVisible( true );

使用边框布局,并在可见前移动包。

您需要在面板上实现可滚动的
界面

您可能希望实现
getScrollableTracksViewportWidth()
方法来返回
true

这将强制面板的宽度与视口的宽度匹配。然后,将根据布局管理器的规则调整面板上每个组件的大小


如果您不想自己实现
可滚动
界面,那么您可以使用提供的方法来控制可滚动属性。

我只希望标签在必要时收缩,因此我不能一般地减小maxWidth。是的,我不想要水平的
滚动条
,我只想要垂直的
滚动条
。我不知道你的
是什么意思,或者如果需要,可以根据需要从滚动窗格常量中使用滚动条
HORIZONTAL\u SCOLLBAR\u AS\u NEEDED
将显示一个滚动条,但我不想要滚动条,这就是问题所在。而pack调用并不重要,这只是调整帧的大小。尝试在右侧列上设置“收缩0”作为约束。仍然没有帮助。右边的柱子无论如何都没有缩小。