我有以下代码:
JList<Song> list = new JList<Song>(this.lib);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
list.setVisibleRowCount(3);
list.setSize(1, 1);
JScrollPane listScroller = new JScrollPane();
listScroller.setViewportView(list);
list.setSize(10, 10);
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
add(list);
我不确定这里有什么问题。当我查看JFrame时,我会在列表中看到列表,其中包含我列表中的所有9个项目。我试着弄乱大小,看看我是否可以让它工作,但事实并非如此。无论我将它设置为什么,大小似乎都没有改变。
我的目标是在必要时有一个垂直和水平滚动条,并且一个固定大小的JList(如果可能的话,固定与帧大小相比最好)。
答案 0 :(得分:5)
您要将list
添加到容器中,而不是listScroller
。
JScrollPane listScroller = new JScrollPane();
listScroller.setViewportView(list);
list.setSize(10, 10);
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
add(list);
你应该尝试使用像...这样的东西。
JScrollPane listScroller = new JScrollPane();
listScroller.setViewportView(list);
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
//add(list);
add(listScroller);
我认为你也会发现list.setSize(10, 10);
毫无意义,因为JScrollPane
(实际上是视口,但让它保持简单)拥有它自己的布局管理器。
如果您希望影响JList
在需要滚动之前显示的可见行数,请查看Jlist#setVisibleRowCount
。
每行的实际宽度和高度由ListCellRenderer
决定,但您可以使用JList#setPrototypeCellValue
来影响这些行的计算方式。