在JList中表示自定义对象

时间:2015-05-23 15:36:54

标签: java swing jlist

对象必须实现哪些类或接口才能直接显示在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中做到这一点。

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

1 个答案:

答案 0 :(得分:1)

您将创建自定义渲染器。

可能是这样的:

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;
    }
}

阅读Writing a Custom Renderer上Swing教程中的部分以获取更多信息。

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