【问题标题】:ArrayList to JList and display specific property of the objectsArrayList 到 JList 并显示对象的特定属性
【发布时间】:2019-10-09 08:32:34
【问题描述】:

我想知道当JList 是从ArrayList 构建时,是否有办法显示该项目的特定属性。

我只想选择执行此操作时将在列表中显示的属性:

JList<String> elementsList = new JList(elementsArrayList.toArray());
elementsScrollPane.setViewportView(elementsList);

感谢您能给我的任何帮助或参考!

【问题讨论】:

    标签: java swing jlist


    【解决方案1】:

    您可以设置ListCellRenderer

    本质上,你写一个函数

    public Component getListCellRendererComponent(JList<?> list,
        Object value, int index, boolean isSelected, boolean cellHasFocus)
    

    返回一个Component。为方便起见,您可以扩展 DefaultListCellRenderer 并在从列表元素中提取要显示的值后调用它的实现,即

    {
        if (value instanceof YourClass) {
            YourClass ob = (YourClass) value;
            return super.getListCellRendererComponent(list, ob.getProperty(), index, isSelected, cellHasFocus);
        }
        return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    }
    

    然后你set your renderer 到你的elementList

    【讨论】:

    • 谢谢@daniu!最后,我创建了一个扩展 DefaultListCellRenderer 的类,并覆盖了“getListCellRendererComponent()”函数。在我用这个新类设置了列表的 cellRenderer 之后。我以前用过 cellRenderers,但我忘了用它!
    【解决方案2】:

    1.

    最简单的方法是

    首先扫描您的输入元素列表以查找您想要显示的属性

    String[] properties = elementsArrayList.stream().map(element::getStringProperty).toArray()
    

    然后将其用作挥杆控制的输入模型 新的 JList(属性)

    1. 典型的、类似 Swing 的是

    根据您拥有的原始对象定义 JList(通过 ListModer 或按原样通过数组)

    new JList(elementsArrayList)
    

    然后创建您的 ListCellRenderer 类,它将感兴趣的属性显示为标签并将此渲染器设置为列表

    jList.setCellRenderer(youCellRedererInstance)
    

    【讨论】:

    • 非常感谢!通过使用 cellRenderer 做到的!
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 2013-01-22
    • 1970-01-01
    • 2020-06-02
    • 2013-02-18
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多