我有以下代码:
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(如果可能的话,与帧大小相比固定是最好的)。
您要将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
来影响这些行的计算方式。