JList没有显示JScrollpane或更改大小

时间:2014-02-11 02:30:22

标签: java swing jframe jscrollpane jlist

我有以下代码:

    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(如果可能的话,固定与帧大小相比最好)。

1 个答案:

答案 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来影响这些行的计算方式。