Отобразить свойство объектов в 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;
}
}