Отобразить свойство объектов в Jlist

У меня есть класс ингредиентов

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 отображает их адрес. Есть ли элегантный способ заставить его отображать свойства объектов, которые он хранит?

1 ответ

Решение

Вы должны использовать JList"s 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;
    }
}
Другие вопросы по тегам