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


person Harter    schedule 06.02.2013    source источник
comment
Как метод toString()? Я не очень понимаю вопрос...   -  person    schedule 07.02.2013


Ответы (1)


Вы должны использовать 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;
    }
}
person MadProgrammer    schedule 06.02.2013
comment
Просто хотел упомянуть, что JList позволяет вам выбрать элемент, введя первый символ элемента. Эта функция работает только тогда, когда метод toString() реализован правильно. Используя рендерер, вы теряете эту функциональность. - person camickr; 07.02.2013
comment
@camickr Это может быть несложно воспроизвести с небольшой работой, но полезно знать - person MadProgrammer; 07.02.2013
comment
@MadProgrammer Спасибо, это то, что я искал. Хотите немного рассказать о репликации добавочного поиска, как сказал camickr? - person Harter; 07.02.2013
comment
@hater в основном вам понадобится какая-то модель поиска, в которую вы можете передать строку, и она будет способна возвращать 1 или более индексов объектов, которые будут соответствовать (на основе критериев модели поиска). Этот процесс потребует какого-то ключевого прослушивателя для отслеживания нажатий клавиш и изменения модели поиска изменений и выделения элементов в JList. - person MadProgrammer; 07.02.2013