JList: mostrar otra cosa que no sea almacenada
Frecuentes
Visto 168 veces
0
Tengo un componente JList y me gustaría almacenar rutas de las imágenes pero mostrar el nombre de la imagen, no la ruta. Tengo un código para presionar el botón Abrir archivo así:
public void openButtonActionPerformed() {
int returnVal = fc.showDialog(null, "Open");
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
}
jList1.setCellRenderer(new JavaRenderer());
}
Y:
class JavaRenderer extends DefaultListCellRenderer {
public JavaRenderer(){
//setOpaque(true);
}
public File file;
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean hasFocus) {
if (value instanceof File) {
File file = (file) value;
return super.getListCellRendererComponent(list, file.getName(), index, isSelected, hasFocus);
}else {
return super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
}
}
}
Pero todavía no funciona. ¿Me puede ayudar con eso?
4 Respuestas
1
Puede usar el jList.setCellRenderer()
por donde pasas new DefaultListCellRenderer()
con método anulado
getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus)
value
- es un objeto que inserta en JList, por lo que puede almacenarlo pero mostrar otra etiqueta:
if (value instanceof File) {
File file = (File) value;
return super.getListCellRendererComponent(list, file.getName(), index, isSelected, cellHasFocus);
} else {
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
contestado el 23 de mayo de 12 a las 13:05
1
Necesitas escribir un ListModel por su cuenta, donde almacena List<File>
internamente y devuelve fileName de getElementAt(int index)
método.
contestado el 22 de mayo de 12 a las 19:05
1
Puede cambiar la forma en que su contenido se representa en JList creando su propio ListCellRenderer. (Mira esto: http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/ListCellRenderer.html)
contestado el 22 de mayo de 12 a las 19:05
1
Además de las respuestas proporcionadas aquí hay otra forma. Puede envolver el objeto File en su propia clase File. Luego, sobrecargue el método toString() para devolver el nombre del archivo.
class CustomFile extends File{
public CustomFile(File f){super(f.getAbsolutePath());}
public String toString(){return getName();}
}
contestado el 22 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java linked-list jlist or haz tu propia pregunta.
Edité mi publicación debido a tus pistas. No funciona y sé que el error es estúpido, pero no puedo encontrarlo. ¿Me puede ayudar con eso? - Doszi89
Necesitas llamar
jList1.setCellRenderer(new JavaRenderer());
solo una vez, donde inicializa su jList. Luego debe agregar Archivo a jList usando listModel. Ver agregar elementos a jList - alasterGracias, en realidad el problema estaba en
File file = (file) value;
porque lo copié sin pensar y debería haber Archivo en lugar de archivo. Gracias por su ayuda y paciencia para principiantes :) - Doszi89