2016-03-06 72 views
1

我想水平地在一行上排列JList,并让它只能水平滚动。我发现list.setLayoutOrientation(JList.VERTICAL_WRAP);如果有足够的物品,它会很好地工作。但是,当列表需要滚动时,滚动条会覆盖列表的最后(也是唯一)一行,所以根本看不到它。我怎样才能防止这一点?滚动条用VERTICAL_WRAP覆盖JList的最后一行

我的测试代码:

JList<String> list = new JList<>("TIVFBJPAVUOHCVINPNYLMSMNNDUSHVSWUYUSNZXTYTXJMJPTISAVVYHOPBFIAXSUUQYYPVGAKEEWOTRCBWQWRXQTYJLCTTHTXPMZWDLQRRUZJSVWDMLYNRUDZXRTEJWAZUOBQCWNCYEPVCPXVWOGVZPOEKPWZZFDGZZGXPBFZQQVKFIXCYFTHRPJJMOYISEUCUTJGZQI".split("[A-D]")); 
list.setLayoutOrientation(JList.VERTICAL_WRAP); 
list.setVisibleRowCount(1); 
frame.add(new JScrollPane(list), BorderLayout.NORTH); 

其结果是:

List

+0

滚动条可没有被包含在preferredSize计算中(如'JScrollPane '会以其他方式补偿)。考虑使用不同的布局管理器 – MadProgrammer

回答

3

强制滚动窗格以包括在其大小计算水平滚动条:

JList<String> list = new JList<String>(...); 
list.setLayoutOrientation(JList.VERTICAL_WRAP); 
list.setVisibleRowCount(1); 
JScrollPane scrollPane = new JScrollPane(list); 
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
frame.add(scrollPane); 
+0

不能相信我之前没有想到这一点。谢谢。 – ricky3350