Establecer el tamaño de las columnas de un JTable en Java

Java Si has trabajado con JTables en Java te sabrás que al momento de agregar columnas los tamaños de las mismas son iguales, no importa la cantidad o longitud de los datos, si tienes 2 o 5 columnas, si algunos datos son enteros y otros son cadenas, el chiste es que todos los tamaños son iguales.

Esto resulta algo incómodo (por no decir bastante) ya que normalmente deseamos que cada columna pueda tener su ancho determinado. Afortunadamente esto se resuelve de forma bastante sencilla.

Aquí el código:

public void setAnchoColumnas(){       
        JViewport scroll =  (JViewport) tbLista.getParent();
        int ancho = scroll.getWidth();
        int anchoColumna;
        TableColumnModel modeloColumna = tbLista.getColumnModel();
        TableColumn columnaTabla;
        for (int i = 0; i < tbLista.getColumnCount(); i++) {
            columnaTabla = modeloColumna.getColumn(i);
            switch(i){
                case 1: anchoColumna = (30*ancho)/100;
                        break;
                case 2: anchoColumna = (50*ancho)/100;
                        break;
                case 3: anchoColumna = (20*ancho)/100;
                        break;
            }                     
            columnaTabla.setPreferredWidth(anchoColumna);           
        }
    }
 

 

Ahora la explicación:

  1. El ejemplo anterior engloba todos los procedimientos en el método setAnchoColumnas(), que no requiere parámetros ni devuelve valores.
  2. Obtenemos el JViewport (que es el área visible de la tabla) y guardamos el ancho total del área visible en una variable de tipo int de nombre ancho.
  3. Una vez hecho esto obtenemos el modelo de las columnas de la tabla en la variable modeloColumna.
  4. Posteriormente hacemos un ciclo que vaya recorriendo todas las columnas de la tabla, en cada pasada obtenemos la columna correspondiente y asignamos su ancho con la instrucción anchoColumna = (30*ancho)/100; (el número 30 en este caso representa el porcentaje del ancho total que ocupará la primera columna, 50 la segunda y 20 la tercera).
  5. Ya que tenemos el ancho de la columna en la variable anchoColumna lo hacemos visible en la tabla con la instrucción columnaTabla.setPreferredWidth(anchoColumna);  

En este caso estoy manejando una tabla con únicamente 3 columnas y el tamaño por porcentajes para que sea un tanto más manejable, puedes manejarlo por pixeles de igual manera y con ‘n’ cantidad de columnas, ahora sí que el límite es el que tú te impongas pero esto te sirve como base.

 

Alguna duda o algo qué decir? Deja tu comentario. Saludox.

16 comentarios:

  1. Juan Carlos dijo...:

    Gran Apunte tio, es de lo mejor que he visto para personalizar un JTable, trabajar con porcentajes, como si de una tabla de html se tratara

  1. Luis dijo...:

    Gracias por tu comentario, sigue visitando mi blog. Saludox.

  1. marta dijo...:

    La verdad es qeu es lo mas completo que he encontrado en cambio de tamaño de columnas.. muy buena explicacion
    yo tengo un problema no se si es posible resolver..quizas me puedas comentar si se puede:

    tengo una tabla, con el numero de columnas variable (depende de los componentes de un vector que viene de otra ventana) pueden ser desde 3 hasta 50. y ademas inicialmente estan vacias

    Entonces cuando mando que muestre muchas solo muestra los puntos suspensivos, yo lo que quiero es que se ajuste al tamaño de la cabecera de la columna, esto es posible..
    asignarle tañamo segun en nombre de la cabecera y no segun los pixels

    ademas que salga la barra de desplazamiento horizontal..que ahora mismo como se hacen tan pequeñas las columnas no sale.
    o sino darme otra idea de como lo podria resolver

    muchisimas gracias

  1. Anónimo dijo...:

    Excelente hermano.

    Excelente.

  1. Anónimo dijo...:

    excelente metodo para el manejo de tablas, mis respetos, sigue creando mas cosas asi, que aca afuera hay un buen de faltos de experiencia como yo.

    necesitaba un metodo como este para mi proyecto, muchas gracias
    saludos

    enrique_cobranza@live.com.mx

  1. Anónimo dijo...:

    Perdonen la pregunta que me estoy iniciando en java,...pero tengo este problema y no se como implementar esta codigo. lo hice como una clase y me da error en JViewport scroll = (JViewport) tbLista.getParent(); especialmente en el ..getParent();

    si alguien me pudiera orientar ,.....

  1. carpintero dijo...:

    muy buena aportacion graxias me sirvio mucho :)

  1. Anónimo dijo...:

    este codigo es de otro...so inutil
    http://es.debugmodeon.com/articulo/establecer-el-tamano-de-las-columnas-de-un-jtable-en-java

  1. Anónimo dijo...:

    BIEN BROER, MUY UTIL... MUY AGRADECIDO x tu aporte!

  1. Anónimo dijo...:

    Excelente aporte. Ya lo probé y funciona. tuve que hacerle dos correcciones. La línea 4 tuve que inicializarla en 0, sino manda error. Como el ciclo for inicia en 0, el primer case debe ser 0 y no 1.

  1. SOY NUEVO EN JAVA , QUISIERA PREGUNTAR EN DONDE VA ESTA LINEAS TBLISTA LA ESTOY REEMPLAZANDO POR EL NOMBRE DE LA VARIABLE JTABLE QUE ES TBLEMPLEADOS PERO NO ME RESULTA

  1. Oxalc dijo...:

    Gracias!!!! es lo mejor que he encontrado.

  1. Ricardo dijo...:

    Buen aporte amigo pero tengo una duda no se si me puedas auxiliar quisiera que se viera en el scroll la barra horizontal como le hago ?

  1. Hola Buen Día, ami este codigo no me da ni un error pero no me respeta el Tamaño de la Columna si alguien me puede Ayudar!!!

  1. jenn dijo...:

    Muchas gracias enserio. Me sirvio muchisimo.

    Besos

  1. Esta buenazo, me ayudo mucho en poco tiempo XD

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

 
Monillo007 © 2010 | Designed by Trucks, Manual Bookmarking | Elegant Themes