2011-04-27 85 views
5

Tengo una JList y estoy usando DefaultListModel, todo está bien y los elementos (cadenas) se agregan correctamente, pero quiero agregar una imagen en JList al lado de cada cadena (por ejemplo, para mostrar el estado de los usuarios). ¿Alguien me puede ayudar con eso? Gracias de antemano. Aquí es cómo agrego los elementos, ¿puedo agregar imágenes también?Agregar una imagen a un elemento JList

private DefaultListModel modelO = (DefaultListModel) Teacher.made_list.getModel(); 
((DefaultListModel) Teacher.made_list.getModel()).addElement(studName); 
+5

Aceptar una respuesta tan que las personas puedan saber qué solución resolvió su problema. – prolink007

+0

¡Acepte la respuesta, por favor! Marque la 'V' en el lado izquierdo de la pregunta y se volverá verde, lo que significa que esta fue la solución que funcionó para usted. Si no está completamente satisfecho con las respuestas, publique un comentario diciendo que falta para que usted lo acepte. – Math

Respuesta

7

deberá implementar ListCellRenderer (o extender DefaultListCellRenderer) y tienen el método getListCellRendererComponent para devolver un Jlabel con un icono en él.

Ejemplo:

public class IconListRenderer extends DefaultListCellRenderer { 
    public Component getListCellRendererComponent(
      JList list, Object value, int index, 
      boolean isSelected, boolean cellHasFocus) { 
     JLabel label = (JLabel) super.getListCellRendererComponent(
       list, value, index, isSelected, cellHasFocus); 
     Icon icon = this.getIcon(list, value, index, isSelected, cellHasFocus) 
     label.setIcon(icon); 
     return label; 
    } 
    protected Icon getIcon(
      JList list, Object value, int index, 
      boolean isSelected, boolean cellHasFocus) { 
     // how do I get icon? 
    } 
} 

Hay que poner en práctica el método getIcon.

+0

Muchas gracias :) –

3

El modelo se utiliza para almacenar los datos, y se utiliza un procesador para mostrar los datos. El renderizador predeterminado puede manejar Cadenas e íconos, pero si necesita hacer más que eso, puede proporcionar un renderizador personalizado. Aquí hay un example. Es para un cuadro combinado, pero el renderizador es el mismo para los JLists.

+0

+1 para el enlace al tutorial de Swing. Tt ayuda a resolver este problema y el tutorial se puede usar como recurso para preguntas futuras. – camickr

+0

Muchas gracias, el enlace es realmente útil :) –

+2

@Fatema Mohsen eres bienvenido :) pero realmente no necesitas agradecernos, solo un voto positivo y marcar una de las respuestas correctas hará que todos estén contentos. –

Cuestiones relacionadas