J'ai un JList qui est rempli à travers un ArrayList de chaînes quelque part, je veux pour la même liste maintenant afficher un ImageIcon enregistré dans mon répertoire quelque part. Pour l'instant, je veux afficher la même icône pour tout élément ajouté à la liste (ou tous les éléments actuellement dans la liste).Affichage d'un ImageIcon dans un JList qui utilise un objet différent pour charger les données JList
Ma liste devrait ressembler à ceci: ICON ÉLÈVE NOM ... ICON ÉLÈVE NOM
Le problème (L'icône de l'image montre la bonne hauteur et il est capturé, mais ne montre pas dans la liste à run-time
Voici mon écouteur d'action qui ajoute les données à la liste.
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;
}
}
Vous avez pas encore posté un SSCCE! Nous n'avons pas accès à StuentModel ou à l'IconListRenderer. Nous n'avons même pas besoin du StudentModel pour un SSCCE. Tout ce que vous avez à faire est de nommer certains noms d'élèves dans votre ArrayList. Je suppose que le problème est rendu. ** Publiez un SSCCE approprié si vous voulez de l'aide **. Je suis fatigué de vous rappeler chaque fois que vous postez une question. – camickr
Je suis d'accord avec camickr: il est vraiment impossible de deviner pourquoi votre code ne fonctionne pas sans un petit exemple de travail. C'est à vous de décider si vous souhaitez fournir un SSCCE - combien avez-vous besoin de notre aide? –
@Camickr, pas besoin d'être animé J'étais vraiment proche de résoudre ce problème et pensé peut-être que je n'utilisais pas la propriété ListCellRenderer correctement, c'est pourquoi j'ai posté le code de référence. Je vais mettre à jour mon post pour avoir une meilleure réponse. – Warz