Esta entrada está orientada a la implementación y explicación de un fragmento de código, que nos permitirá colorear y/o pintar las filas de una tabla (JTable), brindándonos la posibilidad de diferenciarlas unas de otras, teniendo como referencia el valor registrado en una determinada columna o campo:
Clase ColorearFilas.java:
package Metodos; import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class ColorearFilas extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean Selected, boolean hasFocus, int row, int col){
super.getTableCellRendererComponent(table, value, Selected, hasFocus, row, col); if (table.getValueAt(row, 5).toString().equals("Femenino") ) { setBackground(Color.MAGENTA); } else if(table.getValueAt(row, 5).toString().equals("Masculino")){ setBackground(Color.GREEN); } return this; } }
Método del botón desde donde aplicaremos la Clase anterior:
private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) { agregardatos(); ColorearFilas colorear = new ColorearFilas(); tblDatos.setDefaultRenderer (Object.class, colorear); }
VIDEO TUTORIAL (PASO A PASO)
¡Suscríbete HOY!
🔻
Instrucciones y Recomendaciones
1- Procede a crear en tu proyecto, una Clase idéntica a la que hemos resaltado con color amarillo; es decir, la Clase "ColorearFilas.java()".
2- En la primera línea, encontraremos la definición del paquete de nuestro proyecto donde hemos creado nuestra Clase Java, en este caso el paquete se llama "Metodos"; luego, encontraremos que hemos importado las librerías necesarias para que todo funcione correctamente; por lo cual, esta primera sección del código quedaría de la siguiente forma:
5- Vamos a definir las características que posee una celda por defecto, para ello debemos usar la palabra clave "super", y así posteriormente de esta manera acceder al método original "getTableCellRendererComponent" de la superclase "DefaultTableCellRenderer", a este debemos pasarle los parámetros que ya hemos definido en el método del punto 4 (sin especificar el tipo).
Todo esto irá dentro de las llaves "{}" del método anterior (punto 4):
6- Después de la línea de código anterior, procederemos a implementar un condicional del tipo "if(){}else{}", el cual vamos a usar para establecer el color que le aplicaremos a nuestras filas.
Dentro de los paréntesis "()" del "if", usamos el parámetro "table" que representa la tabla, le aplicamos el método ".getValueAt(row, 5)" para obtener el valor de la celda de cualquier fila, pero específicamente de la columna número 5; llamamos al método ".toString()" para convertir el valor capturado, al tipo String; seguidamente, usamos el método ".equals("Femenino")" que nos permitirá comparar y determinar si el valor capturado en la celda es igual al valor y/o texto "Femenino". En el caso dado de que se cumpla la condición, se procederá a llamar al método "setBackground()" para establecer un color de fondo a nuestras celdas, por lo cual debemos pasarle como parámetro un determinado color, es por ello que hacemos uso de la Clase "Color" que nos permitirá emplear ciertas constantes que representan distintos colores, en esta ocasión usamos "MAGENTA". En el caso de que no se cumpla la condición, también asignaremos un color de fondo, lo único que cambiará será el tipo de color a aplicar; es decir, la constante a usar, que en esta ocasión sería "GREEN":
package Metodos;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
3- Seguidamente, se fija el nombre y las propiedades de la Clase, en este caso hemos determinado que será pública; por lo cual, empleamos la expresión "public class"; luego, asignamos el nombre, en este caso "ColorearFilas". Teniendo en cuenta de que lo que necesitamos es modificar ciertas propiedades de las celdas de una tabla, nuestra Clase deberá heredar de otra que le permita acceder a esos privilegios o métodos que definen y/o establezcan dichas características; entonces, para ello usamos la palabra clave "extends" (para definir la herencia), y procedemos a llamar la Clase "DefaultTableCellRenderer", y finalmente colocaremos las llaves de apertura "{" y de cierre "}": public class ColorearFilas extends DefaultTableCellRenderer {}
4- Ahora, usaremos la anotación "@Override" la cual nos permitirá invalidar el comportamiento original del método "getTableCellRendererComponent" que hemos heredado de la Clase "DefaultTableCellRenderer", este nos devolverá un valor del tipo "Component". A este método le definiremos el tipo de parámetros que lleva por defecto; es decir, "JTable table" (la tabla), "Object value" (valor de la celda), "boolean Selected" (identificador y/o propiedad de selección de la celda), "boolean hasFocus" (identificador y/o propiedad de obtención del foco en la celda), "int row" (fila de la tabla a la que pertenece la celda), "int col" (columna de la tabla a la cual pertenece la celda), y finalmente aplicaremos las llaves "{}" que delimitarán el presente método. Todo lo anterior irá dentro de las llaves de la Clase "ColorearFilas":@Override public Component getTableCellRendererComponent(JTable table, Object value, boolean Selected, boolean hasFocus, int row, int col){}
5- Vamos a definir las características que posee una celda por defecto, para ello debemos usar la palabra clave "super", y así posteriormente de esta manera acceder al método original "getTableCellRendererComponent" de la superclase "DefaultTableCellRenderer", a este debemos pasarle los parámetros que ya hemos definido en el método del punto 4 (sin especificar el tipo).
Todo esto irá dentro de las llaves "{}" del método anterior (punto 4):
super.getTableCellRendererComponent(table, value, Selected, hasFocus, row, col);
6- Después de la línea de código anterior, procederemos a implementar un condicional del tipo "if(){}else{}", el cual vamos a usar para establecer el color que le aplicaremos a nuestras filas.
Dentro de los paréntesis "()" del "if", usamos el parámetro "table" que representa la tabla, le aplicamos el método ".getValueAt(row, 5)" para obtener el valor de la celda de cualquier fila, pero específicamente de la columna número 5; llamamos al método ".toString()" para convertir el valor capturado, al tipo String; seguidamente, usamos el método ".equals("Femenino")" que nos permitirá comparar y determinar si el valor capturado en la celda es igual al valor y/o texto "Femenino". En el caso dado de que se cumpla la condición, se procederá a llamar al método "setBackground()" para establecer un color de fondo a nuestras celdas, por lo cual debemos pasarle como parámetro un determinado color, es por ello que hacemos uso de la Clase "Color" que nos permitirá emplear ciertas constantes que representan distintos colores, en esta ocasión usamos "MAGENTA". En el caso de que no se cumpla la condición, también asignaremos un color de fondo, lo único que cambiará será el tipo de color a aplicar; es decir, la constante a usar, que en esta ocasión sería "GREEN":
if (table.getValueAt(row, 5).toString().equals("Femenino") ){ setBackground(Color.MAGENTA); }else{ setBackground(Color.GREEN); }
NOTA: En dado caso de que las constantes que brinda la clase "Color", no satisfagan tus necesidades; podrías hacer combinaciones y así conseguir el color deseado; para ello, deberás sustituir el parámetro "Color.MAGENTA" por "new Color(204, 255, 153)" teniendo en cuenta que obtendrás diferentes resultados cuando modifiques los valores y/o parámetros de tipo entero, por lo cual te recomiendo que te ayudes con una paleta de colores donde obtengas el valor numérico RGB.
7- Como lo habíamos comentado anteriormente en el punto 4, el método en el que nos encontramos nos devolverá un valor del tipo "Component"; entonces, para poder cumplir con lo establecido en dicho método, lo que haremos después del condicional del punto 6, más exactamente luego de la llave de cierre "}" del "else", procederemos a usar la palabra clave "return" (para retornar un valor), e inmediatamente usamos la palabra reservada "this" para hacer referencia al componente con el que hemos trabajado dentro del método.
7- Como lo habíamos comentado anteriormente en el punto 4, el método en el que nos encontramos nos devolverá un valor del tipo "Component"; entonces, para poder cumplir con lo establecido en dicho método, lo que haremos después del condicional del punto 6, más exactamente luego de la llave de cierre "}" del "else", procederemos a usar la palabra clave "return" (para retornar un valor), e inmediatamente usamos la palabra reservada "this" para hacer referencia al componente con el que hemos trabajado dentro del método.
return this;
8- Copia y pega el código resaltado en azul, dentro y al final del método del botón desde el cual realizas la operación de agregar datos de tu formulario a la tabla, o al final del método desde el cual procedes a consultar registros desde tu base de datos para mostrarlos en el JTable.Lo que aquí se hace básicamente, es instanciar un objeto de nuestra Clase "ColorearFilas.java", al cual le hemos colocado por nombre "colorear". En la siguiente línea de código, usamos nuestra tabla que en este caso se llama "tblDatos", le aplicamos el método ".setDefaultRender()" que nos permitirá establecer a nuestra tabla un procesador de celdas por defecto, a dicho método hemos de pasarle 2 parámetros y/o valores, el primero de ellos será o hará referencia al tipo de columnas a las cuales le aplicaremos el renderizado; por lo general, todas las columnas de una tabla son del tipo "Object" al menos que hayas hecho alguna modificación, entonces nuestro primer parámetro sería "Object.class"; el segundo parámetro corresponde al procesador de celdas que se le aplicará al tipo de columnas establecido en el primer valor, en otras palabras el segundo parámetro a pasar será nuestro objeto "colorear":
ColorearFilas colorear = new ColorearFilas();
tblDatos.setDefaultRenderer (Object.class, colorear);
9- Para que no te salga ningún error a la hora de implementar el código anterior (punto 8), deberás de realizar las importaciones necesarias en tu formulario; por lo cual, procederás a colocar la siguiente línea de código, después de la línea que establece el nombre del paquete, por ejemplo "package Formularios;", y sobre la línea que define el nombre de la Clase, por ejemplo "public class Formulario1...":import Metodos.ColorearFilas;
10- Ahora, sólo bastará con ejecutar tu proyecto y hacer las respectivas pruebas, para obtener un resultado parecido al siguiente:11- Si deseas saber cómo asignar el mismo color a todas las celdas de un JTable, sin necesidad de código, y de forma netamente gráfica, usando un entorno de desarrollo integrado como NetBeans IDE, puedes visitar el siguiente enlace:
12- Si te interesa, puedes seguir el Curso de Java, que se está realizando mediante videotutoriales y con eBooks, en el Blog UH T.I.S
¿Conoces una forma más óptima de realizar el anterior procedimiento?, no dudes en compartirla con todos nuestros amigos de la web.
Si te fue de gran ayuda esta información, no olvides compartirla con tus amigos y en las redes sociales.
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.
Bendiciones...
Si te fue de gran ayuda esta información, no olvides compartirla con tus amigos y en las redes sociales.
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.
Bendiciones...
gracias funciona perfectamente con mi base de datos :D
ResponderBorrarSaludos estimado Luis Aguilar, gracias por dejarnos tus comentarios.
BorrarNos alegra de verdad el ser de gran ayuda para ti.
Te invitamos a que compartas esta página en tus redes sociales, de esta manera ayudarás a que otros programadores puedan encontrar el Código JAVA para Colorear las filas de una Tabla.
¡SÓLO EN CRISTO JESÚS HAY SALVACIÓN Y VIDA ETERNA! :)
Bendiciones para ti y toda tu familia...
AGRADECIDO CONTIGO ME AYUDO BASTANTE..!
ResponderBorrarHola alguien sabe como detener esa función cuando limpias la tabla.
ResponderBorrarFue muy clara tu explicacion, y eso que no vi el video :P, gracias.
ResponderBorrar