Java 在Jlist中显示对象的属性

Java 在Jlist中显示对象的属性,java,swing,jlist,defaultlistmodel,Java,Swing,Jlist,Defaultlistmodel,我有一门配料课 public class Ingredient { String NameP; List ListS; String Desc; List ListT; ... 此类的多个实例存储在对象列表中。 我还有一个 javax.swing.JList ListIng; 模型设置为 ListIngModel = new DefaultListModel(); 其思想是使用Jlist显示所有对象的字段“NameP”,选择其中一个要进一步检查,然后抓取所选对象: Ingredient S

我有一门配料课

public class Ingredient {
String NameP;
List ListS;
String Desc;
List ListT;
...
此类的多个实例存储在对象列表中。 我还有一个

javax.swing.JList ListIng;
模型设置为

ListIngModel = new DefaultListModel();
其思想是使用Jlist显示所有对象的字段“NameP”,选择其中一个要进一步检查,然后抓取所选对象:

Ingredient Selected = ListIngModel.get(ListIng.getSelectedIndex())
我可以在列表模型中加载对象,但JList会显示这些对象的地址。
有没有一种优雅的方法可以让它显示它存储的对象的属性?

您应该使用
JList
CellRenderer

请查看以了解更多详细信息

基本上,它允许您定义列表模型中的给定对象在视图中的显示方式。此方法允许您根据需要自定义视图,甚至在运行时替换视图

例如

public class IngredientListCellRenderer extends DefaultListCellRenderer {
    public Component getListCellRendererComponent(JList<?> list,
                                 Object value,
                                 int index,
                                 boolean isSelected,
                                 boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if (value instanceof Ingredient) {
            Ingredient ingredient = (Ingredient)value;
            setText(ingredient.getName());
            setToolTipText(ingredient.getDescription());
            // setIcon(ingredient.getIcon());
        }
        return this;
    }
}
公共类IngredientListCellRenderer扩展了DefaultListCellRenderer{
公共组件GetListCellRenderComponent(JList列表,
对象值,
整数索引,
他当选了,,
布尔单元(聚焦){
getListCellRenderComponent(列表、值、索引、isSelected、cellHasFocus);
if(成分的值实例){
成分=(成分)值;
setText(component.getName());
setToolTipText(component.getDescription());
//setIcon(component.getIcon());
}
归还这个;
}
}

像toString()方法吗?我并没有真正理解这个问题…只是想提一下,JList允许您通过输入项目的第一个字符来选择项目。只有正确实现toString()方法时,此功能才起作用。使用渲染器会丢失此功能。@camickr这可能不难复制,只需做一点工作,但这样做很好know@MadProgrammer谢谢,这就是我要找的。要不要像camickr说的那样详细介绍一下增量搜索的复制?@hater基本上你需要某种“搜索模型”,你可以将字符串传递给它,它能够返回1个或多个匹配对象的索引(基于搜索模型的标准)。这个过程需要某种类型的键侦听器来监视键的笔划,改变更改的搜索模型,并突出显示JList中的项目