Programación General > Java

 Tamaño De Las Columnas En Una Jtable

(1/3) > >>

mabrev:
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:
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 ---  public class TextRenderer extends JTextArea implements TableCellRenderer{    public TextRenderer(){      setLineWrap(true);      setWrapStyleWord(true);      setOpaque(true);    }    public Component getTableCellRendererComponent(JTable table, Object value,    boolean isSelected, boolean hasFocus, int row, int column){      setText((value == null) ? &#34;&#34;: value.toString());      return this;    }  }  
Y para situar nuestro Renderer en vez de el "por defecto":


--- Código: Text ---    TextRenderer tr = new TextRenderer(); // ... //     tabla.getColumn(&#34;Nombre&#34;).setCellRenderer(tr);   

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:
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:
Hola de nuevo:

  He estado investigando un poquillo y parecía que haciendo lo siguiente iba a solucionar mi problema:
   
--- Código: Text --- tabla.setDefaultRenderer(String.class, tr); 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 ---tabla.setDefaultRenderer(Object.class, render); justo antes de la que he puesto para las cadenas.

  Alguna sugerencia??

Muchas gracias.

Saludos

gothmog:
Para comprobar el tipo de objeto dinamicamente, puedes utilizar el operador binario instanceof


--- Código: Text ---if (object instanceof String) 
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.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa