seleccionar - JAVA: poner la imagen en la celda jTable
poner color a una fila de un jtable java (2)
Necesito mostrar una imagen en una de las celdas jTable.
Yo escribí esto:
class ImageRenderer extends DefaultTableCellRenderer {
JLabel lbl = new JLabel();
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
lbl.setText((String) value);
lbl.setIcon(new ImageIcon("/home/ariyan/Desktop/71290452.jpg"));
return lbl;
}
}
y luego lo usó así:
jTable1.getColumn(0).setCellRenderer(new ImageRenderer());
Pero esto no funcionó
¿Como puedo hacer eso?
Gracias
Hmm: jTable1.getColumnModel().getColumn(0).setCellRenderer(new ImageRenderer());
¿quizás?
Aquí está el extracto relevante de algún código de prueba rápida que armé para verificar rápidamente mi conjetura. Muestra íconos desde una carpeta (supone que todos los archivos en una carpeta son iconos, por lo que debe probarlo con algo así como un subdirectorio de tema de icono de XDG). Primero instale el modelo de tabla y luego agregue el representador de celda en las columnas:
class Renderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent (JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
if(isSelected) {
this.setBackground(table.getSelectionBackground());
this.setForeground(table.getSelectionForeground());
}
else {
this.setBackground(table.getBackground());
this.setForeground(table.getForeground());
}
if(column == 0) {
this.setText(list[row]);
}
else {
// edit as appropriate for your icon theme
this.setIcon(new ImageIcon("/usr/share/icons/default.kde4/16x16/apps/"+list[row]));
}
return this;
}
}
class Model extends DefaultTableModel {
@Override
public boolean isCellEditable (int row, int column) {
return false;
}
@Override
public Object getValueAt (int row, int column) {
return list[row];
}
@Override
public int getRowCount () {
return list.length;
}
@Override
public int getColumnCount () {
return 2;
}
@Override
public String getColumnName (int column) {
return column == 0? "Name" : "Preview";
}
@Override
public Class<?> getColumnClass (int columnIndex) {
return String.class;
}
}
// edit base directory as appropriate for your icon theme of choice
static String[] list=new File("/usr/share/icons/default.kde4/16x16/apps/").list();
JTable ya proporciona un renderizador predeterminado para las imágenes. Solo necesita decirle a la tabla qué tipo de datos hay en cada columna y elegirá el mejor representador:
a) anula el método getColumnClass () de JTable o TableModel para devolver la clase de datos en la columna. En este caso, debe devolver un Icon.class.
b) agregue un ImageIcon al modelo de tabla.
Ahora JTable usará el renderizador predeterminado de Icon para esa columna.