У меня есть панель JScrollPane
с JList mediaList
. Содержание списка поддерживается DefaultListModel
. Я получаю новую модель списка после запроса через JDBC (Sqlite 3)JList's ListCellRenderer не печатает нужный индекс DefaultListModel
Я столкнулся с проблемой, когда область прокрутки не рисует новый индекс модели, когда размер вновь созданной модели больше, чем размер более ранняя модель.
// Фрагмент кода
label.addMouseListener (new MouseAdapter() {
DefaultListModel<HashMap<String,String>> mediaModel=new DefaultListModel<>();
mediaModel=mProvider.getNextMenu(paramsCid); // new DefaultListModel
medialist = new JList(mediaModel);
medialist.setOpaque(false);
medialist.setCellRenderer(new MediaCellRenderer());
panel = new JScrollPane(medialist);
panel.setPreferredSize(new Dimension(300,300));
pane1.setOpaque(true);
});
class MediaCellRenderer implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
System.out.println("index: "+index);
JLabel menuTextLabel = new JLabel(mediaModel.get(index).get("title"));
return menuTextLabel;
}
}
заметили, что MediaCellRenderer
печатает ниже индекса, когда длина mediaModel
составляет 2
index: 0
index: 1
Но он печатает ниже индекса, когда длина mediaModel составляет 3
index: 0
index: 1
index: 0 // it prints 0 instead of 2
Может ли кто-нибудь помочь в решении этой проблемы?
Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). Жесткий код некоторых данных для замены БД. –
getNextMenu в приведенном выше коде дает команду DefaultlistModel формы ниже: HashMap fieldList = new HashMap (); listModel.addElement (FieldList); –
Kalx
* ".. в приведенном выше коде даёт .." * Не пытайтесь объяснить словами. Я посмотрю более внимательно на MCVE. –