对象必须实现什么类或接口才能直接显示在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;
    }
}


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

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

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

10-12 06:05