JList没有显示JScrollpane或更改大小

Bra*_*mir 0 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);  
Run Code Online (Sandbox Code Playgroud)

我不确定这里有什么问题.当我查看JFrame时,我会在列表中看到列表,其中包含我列表中的所有9个项目.我试着弄乱大小,看看我是否可以让它工作,但事实并非如此.无论我将它设置为什么,大小似乎都没有改变.

我的目标是在必要时有一个垂直和水平滚动条,并且JList具有一定的固定大小(如果可能,固定与帧大小相比最好).

Mad*_*mer 5

你要添加list到容器,而不是listScroller.

JScrollPane listScroller = new JScrollPane();
listScroller.setViewportView(list);
list.setSize(10, 10);
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
add(list); 
Run Code Online (Sandbox Code Playgroud)

你应该尝试使用类似......

JScrollPane listScroller = new JScrollPane();
listScroller.setViewportView(list);
setLayout(new FlowLayout(FlowLayout.LEFT,10,10));    
//add(list); 
add(listScroller);
Run Code Online (Sandbox Code Playgroud)

我认为你也会觉得list.setSize(10, 10);毫无意义,因为JScrollPane(实际上是视口,但让它保持简单)拥有它自己的布局管理器.

您应该看看Jlist#setVisibleRowCount是否要影响在JList需要滚动之前显示的可见行数.

每行的实际宽度和高度由the确定ListCellRenderer,但您可以使用它JList#setPrototypeCellValue来影响这些行的计算方式.