• Sábado 9 de Noviembre de 2024, 03:50

Autor Tema:  Tamaño De Las Columnas En Una Jtable  (Leído 14196 veces)

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Tamaño De Las Columnas En Una Jtable
« en: Martes 20 de Enero de 2004, 11:08 »
0
Hola:

  Tengo una JTable que muestra el resultado de ejecutar una consulta sobre una base de datos. Mi problema es que algunos campos son muy largos y no se muestran enteros.

  Podría alguien decirme si es posible ajustar el tamaño de la columna para que se muestre el campo completo?? o si es posible aumentar el alto de la celda para que lo muestre en varias líneas?? y cómo puedo hacerlo??

  Muchas Gracias por adelantado.

Saludos.

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #1 en: Domingo 1 de Febrero de 2004, 17:15 »
0
Hay dos formas de hacer eso.

La primera y mas facil consiste en tratar los textos como html. Es decir, supongamos que tu añades en una celda la cadena "Este es un texto de prueba" y no sale entera en la columna. Pues en vez de eso, añades la cadena "<html>Este es un texto de prueba</html>" y automaticamente la mostrara en las lineas que necesite.

La segunda forma seria implementar la clase TableCellRenderer (creo que tb se puede exteneder la DefaultTableCellRenderer). El codigo general seria tal que asi:

Código: Text
  1.   public class TextRenderer extends JTextArea implements TableCellRenderer{
  2.     public TextRenderer(){
  3.       setLineWrap(true);
  4.       setWrapStyleWord(true);
  5.       setOpaque(true);
  6.     }
  7.     public Component getTableCellRendererComponent(JTable table, Object value,
  8.     boolean isSelected, boolean hasFocus, int row, int column){
  9.       setText((value == null) ? &#34;&#34;: value.toString());
  10.       return this;
  11.     }
  12.   }
  13.  
  14.  

Y para situar nuestro Renderer en vez de el "por defecto":

Código: Text
  1.     TextRenderer tr = new TextRenderer();
  2.  
  3. // ... //
  4.  
  5.     tabla.getColumn(&#34;Nombre&#34;).setCellRenderer(tr);
  6.  
  7.  
  8.  


Otra presumible forma de hacerlo, podria ser utilizar un AbstractTableModel en vez de un DefaultTableModel, pero no estoy seguro de como se haria. Si no te convencen estas soluciones, investiga acerca de esto ;)

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #2 en: Lunes 2 de Febrero de 2004, 08:47 »
0
Hola:

  En primer lugar muchas gracias por la ayuda.

  No es que no me gusten las soluciones, pero no puedo utilizarlas tal cuál porque utilizo una clase extendida de JTable para mostrar varias tablas de la BD, y a priori no sé de qué tipo van a ser las columnas cada vez que instancie la clase. ¿Habría algún método de comprobar dinámicamente si el tipo de datos que contiene la columna es String y entonces asignarle un renderer de tipo TextRenderer?

  Saludos y muchas gracias.

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #3 en: Lunes 2 de Febrero de 2004, 14:52 »
0
Hola de nuevo:

  He estado investigando un poquillo y parecía que haciendo lo siguiente iba a solucionar mi problema:
   
Código: Text
  1.  tabla.setDefaultRenderer(String.class, tr);
  2.  
Pero nada, aunque compila y ejecuta sin problemas, lo ignora totalmente. No lo creo, pero tal vez sea porque tengo otro render para todos los demás tipos, y ejecuto la sentencia:
   
Código: Text
  1. tabla.setDefaultRenderer(Object.class, render);
  2.  
justo antes de la que he puesto para las cadenas.

  Alguna sugerencia??

Muchas gracias.

Saludos

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #4 en: Lunes 2 de Febrero de 2004, 16:17 »
0
Para comprobar el tipo de objeto dinamicamente, puedes utilizar el operador binario instanceof

Código: Text
  1. if (object instanceof String)
  2.  

devuelve true si el objeto es una instancia de String, false e.o.c


Sobre lo otro, el nuevo CellRenderer se aplica a cada columna por separado (no me preguntes por que). Por lo que tienes que ir recorriendo las columnas una a una y entonces indicarle el CellRenderer a utilizar.

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #5 en: Miércoles 4 de Febrero de 2004, 08:33 »
0
Hola:

  Muchas gracias por la ayuda.

  Al final he conseguido que me asocie un render a cada tipo, utilizando un modelo propio que hereda de DefaultTableModel, utilizando la siguiente función para proporcionar la clase de datos de la columna:
Código: Text
  1.   public Class getColumnClass(int col)
  2.     {
  3.     return getValueAt(0, col).getClass();
  4.     }
  5.  
 Así ya me reconoce los tipos de cada columna y puedo utilizar
Código: Text
  1. tabla.setDefaultRenderer(String.class, tr);
  2.  

Saludos

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #6 en: Jueves 5 de Febrero de 2004, 20:59 »
0
Cita de: "gothmog"
Hay dos formas de hacer eso.

La primera y mas facil consiste en tratar los textos como html. Es decir, supongamos que tu añades en una celda la cadena "Este es un texto de prueba" y no sale entera en la columna. Pues en vez de eso, añades la cadena "<html>Este es un texto de prueba</html>" y automaticamente la mostrara en las lineas que necesite.
Hola:

  He intentado lo que me dijiste de tratar los textos como html, pero en vez de utilizar las filas que necesite para mostrarlo, ahora en vez de mostrar "Este es un tex...", solo muestra las palabras que entran enteras en la primera línea y pasa de las demás, es decir, aparece "Este es un". Alguna idea de por qué puede pasar ésto.

Saludos y muchas gracias.

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #7 en: Viernes 6 de Febrero de 2004, 00:22 »
0
Puede ser que la altura de la celda no se modifique automaticamente. En ese caso tendrias que manejarlo tu.

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #8 en: Miércoles 11 de Febrero de 2004, 11:41 »
0
Hola:

  Pues nada, al final en vez de complicarme más la vida, he recurrido al método más rápido (aunque no me guste demasiado). He dejado el contenido de la celda como estaba, apareciendo puntos suspensivos al final de aquellas celdas donde no entra el texto, y he añadido un ToolTipText que muestra el texto completo cuando se situa el ratón sobre la celda.

  Saludos y muchas gracias por la ayuda.

thiacyn

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #9 en: Martes 22 de Febrero de 2005, 15:29 »
0
hola necesito cuanto antes el codigo para conectar base de datos a un jtable, desde ya muchas gracias...

mi dir es thiacyn1980@hotmail.com

thiacyn

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Tamaño De Las Columnas En Una Jtable
« Respuesta #10 en: Martes 22 de Febrero de 2005, 15:32 »
0
Cita de: "mabrev"

 
hola necesito cuanto antes el codigo para conectar base de datos a un jtable, desde ya muchas gracias...

mi dir es thiacyn1980@hotmail.com