【问题标题】:JList not showing JScrollpane or changing sizeJList 不显示 JScrollpane 或更改大小
【发布时间】:2014-02-11 02:30:22
【问题描述】:

我有以下代码:

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

【问题讨论】:

    标签: java swing jframe jscrollpane jlist


    【解决方案1】:

    您将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 来影响这些值的计算方式。

    【讨论】:

    • 我将其更改为包含“add(listScroller)”,但仍然无法正常工作。另外,我将上面代码段中的可见行数设置为 3。它一次显示列表中的所有内容。
    • 在您提供MCVE 之前,我建议的任何内容都是学术性的,但听起来您仍在某处将list 直接添加到容器中
    • 好的。谢谢你。我以为我应该同时添加两者。谢谢!
    • 对不起,我的错,我会更新问题以反映我的意思;)
    • @AndrewThompson 在第二个示例中我的错误,复制和粘贴代码:P
    猜你喜欢
    • 2020-09-10
    • 2013-12-17
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多