Java Swing - JScrollPane使Viewport宽度适合JScrollPane宽度

时间:2017-11-10 11:01:55

标签: java swing layout scroll jscrollpane

我一直试图让JScrollPane宽度缩小的内容,例如。我已将HorizontalScrollBarPolicy设置为NEVER,但最终没有出现ScrollBar且内容不再显示。

enter image description here

我希望它看起来像这样:

enter image description here

这是我的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();

我遗憾地不知道如何做到这一点,JViewport的{​​{1}}没有提供任何可能有用的方法,JScrollPane本身也没有。

此外,我已尝试使用JScrollPaneBoxLayout代替FlowLayout来实现相同的目标,以验证MigLayout不是导致问题的原因

2 个答案:

答案 0 :(得分:1)

您需要在面板上实施Scrollable界面。

您希望实现getScrollableTracksViewportWidth()方法以返回true

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

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

答案 1 :(得分:0)

尝试设置收缩标签的最大宽度    你不需要滚动条?
   如果需要从滚动窗格常量

使用滚动条根据需要
final JFrame frame = new JFrame( "Test" );
frame.setLayout(new BorderLayout());
frame.add( scrollPane , BorderLayout.CENTER);
frame.pack();
frame.setVisible( true );

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