Java Swing - JScrollPane 使视口宽度适合 JScrollPane 宽度
Java Swing - JScrollPane fit Viewport width to JScrollPane width
我一直在尝试缩小 JScrollPane
的内容宽度,例如。我已将 HorizontalScrollBarPolicy
设置为 NEVER
,但这最终导致没有 ScrollBar 出现并且内容不再显示。
我希望它看起来像这样:
这是我的 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
而不是 MigLayout
来实现相同的目的,以验证 MigLayout
不是问题。
尝试设置收缩标签的最大宽度。
你不需要滚动条?
if need to use scrollbar as needed from scroll pane constants
final JFrame frame = new JFrame( "Test" );
frame.setLayout(new BorderLayout());
frame.add( scrollPane , BorderLayout.CENTER);
frame.pack();
frame.setVisible( true );
使用了边框布局,并在可见之前移动了包。
您需要在面板上实现 Scrollable
接口。
您可能希望将 getScrollableTracksViewportWidth()
方法实现为 return true
。
这将强制面板的宽度与视口的宽度相匹配。然后面板上的每个组件将根据布局管理器的规则调整大小。
如果您不想自己实现 Scrollable
接口,那么您可以使用 Scrollable Panel,它提供了允许您控制可滚动属性的方法。
我一直在尝试缩小 JScrollPane
的内容宽度,例如。我已将 HorizontalScrollBarPolicy
设置为 NEVER
,但这最终导致没有 ScrollBar 出现并且内容不再显示。
我希望它看起来像这样:
这是我的 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
而不是 MigLayout
来实现相同的目的,以验证 MigLayout
不是问题。
尝试设置收缩标签的最大宽度。
你不需要滚动条?
if need to use scrollbar as needed from scroll pane constants
final JFrame frame = new JFrame( "Test" );
frame.setLayout(new BorderLayout());
frame.add( scrollPane , BorderLayout.CENTER);
frame.pack();
frame.setVisible( true );
使用了边框布局,并在可见之前移动了包。
您需要在面板上实现 Scrollable
接口。
您可能希望将 getScrollableTracksViewportWidth()
方法实现为 return true
。
这将强制面板的宽度与视口的宽度相匹配。然后面板上的每个组件将根据布局管理器的规则调整大小。
如果您不想自己实现 Scrollable
接口,那么您可以使用 Scrollable Panel,它提供了允许您控制可滚动属性的方法。