Отображение ImageIcon в JList, который использует другой объект для загрузки данных JList - PullRequest
1 голос
/ 30 июля 2011

У меня есть 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;
}
  }

1 Ответ

1 голос
/ 30 июля 2011

JList имеет метод, как добавить Icon / ImageIcon в ListCellRenderer , ссылка, например, о JComboBox , который содержит JList, другие примеры здесь и здесь

...