当JList内部更改时,使JScrollPane显示滚动条

Vol*_*lkA 5 java swing

我正在尝试使用动态更改JScrollPane中的JList

myList.setListData(someArray);
Run Code Online (Sandbox Code Playgroud)

在此之后,我希望JScrollPane根据需要显示Scrollbars,但这不会发生.谷歌搜索问题不是很有帮助.我尝试了以下方法的各种组合,但收效甚微(主要是通过API文档):

myScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
myList.validate(); myScrollPane.validate();
myScrollPane.setPreferredSize(Dimension someDimension);
myScrollPane.setViewportView(moduleList);
myScrollPane.setLayout(...);
Run Code Online (Sandbox Code Playgroud)

使用第一种方法时会出现滚动条,但模型更改不会激活它.我还连接到PropertyChangeEvent并验证模型更改时JList触发和事件.我在这里错过了什么?我必须使用什么方法来完成这项工作,甚至更好的方法是什么属性可以使这项工作开箱即用?

小智 9

如果在JList上设置preferredSize,即使是(0,0),那么JScrollPane也不起作用 - 确保它未设置,必要时setPreferredSize(null)

请参阅mrtextminer如下

此问题的解决方案是不设置JList的preferredSize(删除设置语句).在Netbeans IDE 5.5.1中,通过右键单击JList的preferredSize属性,然后选择"恢复默认值",可以取消设置JList的preferredSize.

总之,只设置JScrollPane的preferredSize.不要设置JList的preferredSize.