java - 表示 JList 中的自定义对象

标签 java swing jlist

对象必须实现什么类或接口(interface)才能直接显示在 JList 中?

示例:

class CustomObject implements SOMETHING_TO_GIVE_A_STRING_REPRESENTATION{

    public String name = "Object name!"

    @override
    public getString(){
        return this.name;
    }
}

然后在 ArrayList 中:

CustomObject [] lst = {object1, object2, object3};

DefaultListModel mdl = new DefaultListModel(lst);
myJList.setmodel(mdl)

最后我喜欢在 JList 中看到对象的 name 属性。

我以前用 C# 做过这个,但我不知道如何在 JAVA 中做到这一点。

我希望问题很清楚。提前致谢。

最佳答案

您将创建一个自定义渲染器。

也许是这样的:

class StringRenderer extends DefaultListCellRenderer
{
    public Component getListCellRendererComponent(
        JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        YourObject object = (YourObject)value;
        setText( object.getString() );

        return this;
    }
}

阅读 Swing 教程中关于 Writing a Custom Renderer 的部分了解更多信息。

请注意,默认呈现器会调用自定义对象的 toString() 方法。因此,您只需实现 toString() 方法来调用 getString() 方法,默认渲染器就会工作。论坛上的大多数人不喜欢使用 toString() 方法来提供渲染文本,但这样做的一个好处是 JList 中项目的键盘选择仍然有效,因为此默认逻辑也基于 toString () 方法。如果您使用自定义渲染器,您将失去此功能。

关于java - 表示 JList 中的自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414519/

相关文章:

java - 将一个 GUI 面板中的用户输入显示在另一个 GUI 面板上

java - JList 未在 JButton 按下时更新

java - 从 JList 中删除所选项目

Java相当于python all and any

java - 如何在 spring 4 中使用不同作业的数据库值动态设置 cron 表达式

java - 导出时更改文件路径

java - 如何防止 JPanel 调整大小以填充 JScrollPane

Java,扩展File以获得更多属性

java - 背景图像在 html 中不起作用

java - 二维数组无法解析为变量