У меня есть JList, который заполняется через ArrayList строк где-то еще, я хочу, чтобы для того же списка теперь отображался ImageIcon, сохраненный где-то в моем каталоге.На данный момент я хочу отобразить тот же значок для любого элемента, добавленного в список (или любых элементов в настоящее время в списке).
Мой список должен выглядеть следующим образом: ЗНАЧОК СТУДЕНТА ЗНАЧКА ... ЗНАКОМ СТУДЕНТА ЗНАЧКА
Проблема (Значок изображения показывает правильную высоту, и он записывается, ноне отображается в списке во время выполнения
Вот мой слушатель действий, который добавляет данные в список.
public class StudentListener implements ActionListener{
private Main_Menu menu;
private ArrayList<String> arrayList = new ArrayList<String>();;
Iterator iterator = arrayList.iterator();
JList sList;
Map<Object, Icon> icons = new HashMap<Object, Icon>();
/**
*
* @param menu the referenced menu from our main menu
*/
public StudentListener(Main_Menu menu){
this.menu = menu;
}
@Override
public void actionPerformed(ActionEvent ae) {
Icon iCon = new ImageIcon("/Project/src/Images/1312046124_picture.png"); // icons
int iHeight = iCon.getIconHeight();
icons.put("name", iCon);
//add all the students to our List
try {
StudentModel = new Student_Model();
} catch (SQLException ex) {
Logger.getLogger(Student_Controller.class.getName()).log(Level.SEVERE, null, ex);
}
//arrayList = StudentModel.getStudents(); // modify to use an arrayList of string
arrayList.add("John");
arrayList.add("Smith");
iterator = arrayList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().toString());
}
sList = this.menu.getStudentList();
sList.setListData(arrayList.toArray());
sList.setFont(new Font("Arial", Font.BOLD, 14));
System.out.println("height of icon " + iHeight); // displays the correct height
sList.setCellRenderer(new IconListRenderer(icons));
}
}
IconListCellRenderer
public class IconListRenderer
extends DefaultListCellRenderer {
private Map<Object, Icon> icons = null;
public IconListRenderer(Map<Object, Icon> icons) {
this.icons = icons;
}
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
// Get the renderer component from parent class
JLabel label =
(JLabel) super.getListCellRendererComponent(list,
value, index, isSelected, cellHasFocus);
// Get icon to use for the list item value
Icon icon = icons.get(value);
// Set icon to display for value
label.setIcon(icon);
return label;
}
}