En la sección CONSULTAS ¿NECESITAS AYUDA CON TU CÓDIGO? me pedía si podía hacer un nuevo ejemplo con un TableCellRenderer para poder mostrar una imagen y una descripción en un JTable...
Nada más fácil, el TableCellRenderer por defecto que tiene instalado la clase JTable nos renderiza las imágenes sin necesidad de introducir código nuevo. Por lo tanto solo tenemos que pasar un objeto de la clase ImageIcon como contenido de una fila y se pintará automáticamente, siempre que la clase TableCellRenderer sepa que tipo de objeto debe pintar.
Por lo tanto la clave de esto pasa por decir que tipo de objeto se debe pintar, el modelo de datos por defecto de un JTable es el DefaultTableModel, este modelo hace creer al renderer que todos los objetos que debe pintar son Object, por lo que lo único necesario para poder mostrar una imagen es crear una clase que extienda DefaultTableModel y sobreescribir el método que indica que tipo de objeto contiene cada columna.
En el modelo por defecto tenemos:
public Class<?> getColumnClass(int columnIndex) { return Object.class; }Y la modificación que debemos hacer:
private class MyTableModel extends DefaultTableModel { public MyTableModel(Object[][] data, Object[] columnNames) { super(data, columnNames); } @Override public Class<?> getColumnClass(int columnIndex) { Class<?> clazz = Object.class; Object aux = getValueAt(0, columnIndex); if (aux != null) { clazz = aux.getClass(); } return clazz; } }
Es decir, nuestra tabla queda así:
package tableIconoDescripcion; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table extends JTable { public Table() { super(); String [] columnNames = new String[]{ "Nombre", "Icono", "Descripción"}; Object [][] data = new Object[][]{ {"Angel", createImage("icono1.jpg"), "angelarcosheredia@gmail.com"}, {"Juan", createImage("icono2.jpg"), "juan@gmail.com", false}, {"Ana", createImage("icono3.jpg"), "ana@hotmail.com", false} }; MyTableModel model = new MyTableModel(data, columnNames); this.setRowHeight(100); this.setModel(model); } /** * Para recuperar una imagen de un archivo... * @param path Ruta de la imagen relativa al proyecto * @return una imagen */ public ImageIcon createImage(String path) { URL imgURL = getClass().getResource(path); if (imgURL != null) { return new ImageIcon(imgURL); } else { System.err.println("Couldn't find file: " + path); return null; } } private class MyTableModel extends DefaultTableModel { public MyTableModel(Object[][] data, Object[] columnNames) { super(data, columnNames); } @Override public Class<?> getColumnClass(int columnIndex) { Class<?> clazz = Object.class; Object aux = getValueAt(0, columnIndex); if (aux != null) { clazz = aux.getClass(); } return clazz; } } }
Este sería el resultado obtenido:
Y para lanzar la aplicación simplemente ejecutamos este código.
package tableIconoDescripcion; import javax.swing.JFrame; import javax.swing.JScrollPane; public class Main { private static void createAndShowGUI() { JFrame frame = new JFrame("Componentes Swing en JTable"); final Table table = new Table(); // La añadimos a un scroll para mostrar la cabecera JScrollPane scroll = new JScrollPane(table); frame.add(scroll); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 200); frame.setVisible(true); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } }
Eso es todo, para cualquier otra aclaración, no dudéis en contactar conmigo.
Un saludo
9 comentarios:
Hola Como puedo ingresar una imagen en la tabla que la cargo con datos de mysql y quiero ver si existe la capasidad de hacer un for para ingresar las imagenes
se agradece!
Buenas tardes, como se puede cargar una imagen pero de una url en internet ???
Buenos días Enrique,
podrías probar con este código, ya me dirás si te sirve:
try {
// Creamos una url que apunte a la imagen
URL url = new URL("http://tuHost:8080/imagen.jpg");
// Cargamos la imagen
Image image = Toolkit.getDefaultToolkit().getDefaultToolkit().createImage(url);
} catch (MalformedURLException e) {
} catch (IOException e) {
}
ola muy interesante quisiera que me ayudes en lo siguiente estoy elaborando un proyecto en el curso de ingenieria de softare II dos y pues lo que quiere hacer es lo siquiente tengo mi tabla llamada habitacion y en ello quiero tener un icono por estado de habitacion es decir que cuando mi habitacion este en reserva entonces al costado debo tener un icono pero todo ello es dentro de la tabla al igual para los estados de alquiler mira te dejo mi coorreo vera_1566_love@hotmail.com te lo agradeceria mucho mi proyecto es con base de datos
como puedo cargar una imagen "blob" a un jtable
como puedo mostrar la imagen a mi jtable con mysql dandole como parametro a la imagen como longblob
de manera grafica como seria ??
CONSULTA GENIOS, TENGO UN TABLA DONDE SOLO SE VISUALIZAN LOS DATOS INICIALES LLENADOS Y NO TODO LO INGRESADO POR EL TEXTFIELD, COMO HAGO PARA VISUALIZARLOS EN SU TOTALIDAD SIN NECESIDAD DE ESTIRAR LA TABLA EN NETBEANS
hola me dejaron un proyecto debo agregar una imagen a un table me podrias ayudar este es mi correo centenotapiaricardomanuel@gmail.com
Publicar un comentario