Bienvenido(a),
Visitante
. Favor de
ingresar
o
registrarse
.
Septiembre 03, 2010, 02:16:08
Noticias:
Más tutoriales de java
Foros Java y C/Linux
Programación
Java J2SE
Imagen en celda de JTable
« anterior
próximo »
Páginas:
[
1
]
2
Autor
Tema: Imagen en celda de JTable (Leído 1326 veces)
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Imagen en celda de JTable
«
en:
Junio 24, 2009, 05:26:36 »
Hola amigos, les escribo a ver si me pueden ayudar ya que tengo un problemilla.
He seguido las guías de chuidiang para insertar imagenes en las celdas de una JTable pero no lo consigo.
Hice mi clase RenderTabla de la siguiente manera:
Código:
public class RenderTabla extends JLabel implements TableCellRenderer {
ImageIcon hombre= new ImageIcon(getClass().getResource("hombre.jpg"));
ImageIcon mujer= new ImageIcon(getClass().getResource("mujer.jpg"));
ImageIcon animal= new ImageIcon(getClass().getResource("animal.jpg"));
public RenderTabla()
{
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
String tipo= SerVivo.getTipo;
JLabel etiqueta = new JLabel();
if (value instanceof String)
{
if (tipo.equals("hombre"))
etiqueta.setIcon(hombre);
else if (tipo.equals("mujer"))
etiqueta.setIcon (mujer);
else
etiqueta.setIcon (animal);
}
return etiqueta;
}
No me queda claro a dónde se retorna el valor de la etiqueta?
En la clase donde uso mi JTable he puesto lo siguiente debajo del InitComponents(); :
Código:
RenderTabla miRender = new RenderTabla();
tabla.setDefaultRenderer(String.class, miRender);
La clase "ModeloTabla" no la hice ya que mi JTable uso el DefaultTableModel y no un model personalizado, no se si esto tendrá algo que ver.
Desde ya agradezco muchísimo la ayuda que puedan brindarme ya que esto es muy importante para mi!
Saludos,
Guillermo
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #1 en:
Junio 24, 2009, 06:32:34 »
Hola:
Según pones, has cambiado el render para String.class. El DefaultTableModel devuelve que todos son Object.class, por lo que no se usará tu render en ninguna columna.
Herede de DefaultTableModel y sobreescribe el método getColumnClass() para que devuelva String.class en la columna que te interese y Object.class en el resto.
Al método de tu TableCellRenderer lo llamará el JTable y el JLabel que devuelves lo usará el JTable para ponerlo en la celda.
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #2 en:
Junio 24, 2009, 08:42:09 »
Hola chuidiang, gracias por tu respuesta.
Yo he puesto en la línea "tabla.setDefaultRenderer(String.class, miRender); " String.class ya que tu ejemplo ponía Integer.class, pero como yo estoy usando strings en la clase RenderTabla se me ocurrió eso. Entonces en lugar de String.class en esa línea pongo Object.class?
En qué clase debo heredar de DefaultTableModel para sobreescribir el método getColumnClass()? Mi clase en la que hago tabla.setDefaultRenderer hereda de JInternalFrame
no comprendo mucho del tema
mi clase RenderTabla la dejo intacta?
Agradezco de nuevo tu ayuda
Saludos!
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #3 en:
Junio 24, 2009, 09:24:59 »
Hola:
Al JTable se le pasa un modelo de datos, bien en el constructor, bien con setModel(). Ese modelo de datos debe heredar de TableModel. Puede ser o el DefaultTableModel o uno como el que hice en el tutorial o cualquier otra clase que tú quieras, pero que implemente TableModel.
El JTable le pregunta, para cada columna, al TableModel (a la clase que lo implementa), cual es la clase para cada columna a través del método getColumnClass(). El DefaultTabeModel devuelve todos Object.class. El que yo hice, devolvía Integer.class
Una vez que el JTable sabe la clase de la columna, le pide al TableCellRender que tú le hayas pasado en el método setDefaultTableCellRender() para esa clase concreta el cómo pintar la celda.
Si tu modelo (el DefaultTableModel) devuelve Object.class para todas las columnas, el JTable usará lo que le hayas pasado como render para Object.class y pintará TODAS las columnas con el icono y el jlabel.
Por ello, lo mejor es que te hagas tu propio modelo de tabla. La forma más sencilla es que heredes de DefaultTableModel y sobreescribas el método getColumnClass() como te he indicado, para que devuelva Object.class en todas las columnas excepto en la quieres cambiar, que debe devolver String.class. Luego cambia el TableCellRender sólo para String.class.
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #4 en:
Junio 25, 2009, 07:44:13 »
Hola, nuevamente yo molestando
En mi caso, la JTable tendrá en cada celda un objeto de mi clase SerVivo. Según lo que el usuario desee, si elige hombre la tabla se llenará de íconos de sexo masculino, pero puede hacer clic en una celda y cambiar a femenino automáticamente (al seleccionar esa celda) o sea que la imagen debería cambiarse a un símbolo femenino.
Según lo que me has explicado al usar el DefaultTableModel pintará todas las columnas con el ícono que está dentro del JLabel, verdad? Entonces supongo que me sirve más este caso? o sea el seguir usando DefaultTableModel? ya que todas las celdas tendrán un objeto del mismo tipo y no distintos tipos de datos?
Gracias de nuevo por tu paciencia con este novato
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #5 en:
Junio 25, 2009, 09:01:06 »
Sí, si todas las columnas son del mismo tipo, entonces puedes usar sin problemas DefaultTableModel. Cambia el render para Object.class
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #6 en:
Junio 25, 2009, 09:43:11 »
Hola!!!!
Ahora sí veo las imágenes!!!! Pero quedan chiquitas y a la derecha queda bastante espacio blanco.
Cómo puedo hacer para que las celdas se ajusten al tamaño de las imágenes?
Muchas gracias!!!!
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #7 en:
Junio 26, 2009, 08:54:17 »
Hola:
El JTable tiene un método para fijar el alto de las filas setRowHeight(). Pon las filas del alto de las imágenes. En este otro enlace tienes cómo
fijar el ancho de las columnas
.
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #8 en:
Julio 02, 2009, 10:11:48 »
Hola! Estuve enfermo y recién hoy puedo volver a programar
He usado el método setRowHeight() como me dijiste y me ha funcionado de maravilla.
Leyendo tu ejemplo para setear el ancho, veo que tomas las columnas por su nombre, mi problema es que yo tengo una grilla llena de imagenes y las columnas no tienen nombre ya que todas tienen el mismo tipo de objeto. Intenté pasarle el índice de la columna pero me lanza una excepción al ejecutar le programa y no continúa.
Cuando puse el nombre de mi tabla . no me apareció el método getTableColumn(), probé así:
TableColumn columna = tabla.getColumn(0);
Tienes alguna idea para que pueda solucionar esto?
Muchas gracias de nuevo, eres de gran ayuda!!!!!!!
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #9 en:
Julio 02, 2009, 10:50:32 »
Hola:
Las columnas de la tabla pueden tener perfectamente nombres, aunque no sean visibles y el contenido sean imágenes. Llama al constructor en el que se pasa un array de columnnames o bien el TableModel que uses puede devolver esos identificadores/nombres.
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #10 en:
Julio 02, 2009, 11:55:41 »
Hola!
Yo llamo al constructor así:
tabla.setModel(new DefaultTableModel(misTipos, miVector));
miVector, lo defino antes asi:
String[] miVector = new String[medida];
donde medida es un parámetro que le paso al formulario, ya que el valor lo elige el usuario, y a raíz de lo que ponga tengo que crear la tabla con ese valor.
El tema es que yo le paso esa variable para que me haga la cantidad de columnas que eligió el usuario, pero cómo les puedo setear el nombre?
Gracias!
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #11 en:
Julio 03, 2009, 05:50:16 »
El nombre sería el contenido de cada uno de los elementos de ese array. Así que antes de crear el DefaultTableModel, rellena los elementos de miVector con los nombres que quieras. PUedes hacerloc on un bucle
Código:
String [] miVector = new String[medida];
for (int i=0;i<medida; i++)
miVector[i] = Integer.toString(i);
tabla.setModel (new DefaultTableModel (misTipos,miVector));
De esta forma, los nombres de las columnas sería "0", "1", "2",...
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #12 en:
Julio 03, 2009, 08:57:34 »
Hola chuidiang!!
Muchas gracias!! cada vez siento más cerca el resultado final
Las columnas quedaron con el nombre tal como me dijiste, ahora el único problema es que no puedo hacer TableColumn columna = tabla.getTableColumn("1"); ya que no me aparece el método getTableColumn cuando pongo tabla.
Me aparecen getColumn, getColumnName, getTableHeader, entre muchos otros, pero el getTableColumn no
Tengo el import javax.swing.table.TableColumn; pero nada
Muchas gracias de nuevo!
En línea
chuidiang
Administrator
Hero Member
Karma: 2
Mensajes: 3381
Re: Imagen en celda de JTable
«
Respuesta #13 en:
Julio 03, 2009, 09:42:55 »
getColumn().
Se bueno.
En línea
http://www.chuidiang.com
http://blog.chuidiang.com
Guille_Be
Newbie
Karma: 0
Mensajes: 10
Re: Imagen en celda de JTable
«
Respuesta #14 en:
Julio 03, 2009, 10:09:37 »
Hola!! bueno mi código ha quedado:
Código:
String[] miVector = new String[medida];
for (int i = 0 ; i < medida; i++)
{
miVector[i] = Integer.toString(i);
}
TableColumn columna = tabla.getColumn("1");
columna.setPreferredWidth(anchoImagen);
El ancho de la imagen lo obtengo arriba con getIconWidth();
Cuando ejecuta la línea del .getColumn se para el programa por una excepción "Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Identifier not found"
Será que el código no va en ese formulario donde lo estoy poniendo?
gracias!!
En línea
Páginas:
[
1
]
2
« anterior
próximo »
Ir a:
Por favor selecciona un destino:
-----------------------------
Programación
-----------------------------
=> C/C++ linux
=> Visual C#
=> Java J2SE
===> Temas de interés cerrados.
=> Java: Librerías
=> Java J2ME
=> Visual Basic
=> Pyhton
=> Perl
-----------------------------
Programación Web
-----------------------------
=> Javascript
=> ActionScript
=> CSS
=> PHP
=> Java J2EE y JSP
-----------------------------
Herramientas y librerías
-----------------------------
=> IDEs
=> Maven y Ant
=> Control de Versiones
=> Bases de Datos
=> Herramientas de Gestión de Proyectos
-----------------------------
Metodologías de Gestión de Proyectos
-----------------------------
=> Metodologías Agiles
=> Metodologías tradicionales
-----------------------------
Sistemas Operativos
-----------------------------
=> Linux
=> Windows
-----------------------------
Varios
-----------------------------
=> Ofertas de empleo
=> ¿Un cafecito?
=> Varios
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión
Powered by SMF 1.1.11
|
SMF © 2006-2007, Simple Machines LLC
Loading...