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:
- El ejemplo anterior engloba todos los procedimientos en el método setAnchoColumnas(), que no requiere parámetros ni devuelve valores.
- 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.
- Una vez hecho esto obtenemos el modelo de las columnas de la tabla en la variable modeloColumna.
- 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).
- 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.
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
ResponderBorrarGracias por tu comentario, sigue visitando mi blog. Saludox.
ResponderBorrarLa verdad es qeu es lo mas completo que he encontrado en cambio de tamaño de columnas.. muy buena explicacion
ResponderBorraryo 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
Excelente hermano.
ResponderBorrarExcelente.
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.
ResponderBorrarnecesitaba un metodo como este para mi proyecto, muchas gracias
saludos
enrique_cobranza@live.com.mx
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();
ResponderBorrarsi alguien me pudiera orientar ,.....
muy buena aportacion graxias me sirvio mucho :)
ResponderBorrareste codigo es de otro...so inutil
ResponderBorrarhttp://es.debugmodeon.com/articulo/establecer-el-tamano-de-las-columnas-de-un-jtable-en-java
BIEN BROER, MUY UTIL... MUY AGRADECIDO x tu aporte!
ResponderBorrarExcelente 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.
ResponderBorrarSOY 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
ResponderBorrarGracias!!!! es lo mejor que he encontrado.
ResponderBorrarBuen 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 ?
ResponderBorrarHola 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!!!
ResponderBorrarMuchas gracias enserio. Me sirvio muchisimo.
ResponderBorrarBesos
Esta buenazo, me ayudo mucho en poco tiempo XD
ResponderBorrarMuchas gracias amigo .. quedo perfecto,,,
ResponderBorrar