7

我有一个成分类

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 会显示这些对象的地址。有没有一种优雅的方式让它显示它存储的对象的属性?

4

1 回答 1

7

你应该使用JList'sCellRenderer

查看如何使用列表了解更多详细信息。

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

例如

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;
    }
}
于 2013-02-06T22:58:16.430 回答