我一直试图让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();
我遗憾地不知道如何做到这一点,JViewport
的{{1}}没有提供任何可能有用的方法,JScrollPane
本身也没有。
此外,我已尝试使用JScrollPane
和BoxLayout
代替FlowLayout
来实现相同的目标,以验证MigLayout
不是导致问题的原因
答案 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 );
使用边框布局,并在可见之前移动包。