Me salto el paso de cómo crear la tabla ya que sino me va a quedar un código bastante amplio. Si alguien necesita que le diga como hacer una Tabla, ya sea con datos desde un archivo, desde BD, nada más que tiene que preguntarmelo.
Vamos allá.
Con la tabla montada, tenemos que hacer lo siguiente:
TablaClientes.setDefaultRenderer(Object.class, new FormatoTablaClientes());
Con esto estamos asignando un nuevo render a nuestra tabla. Para ello nos creamos una nueva clase FormatoTablaClientes que herede (extends) de DefaultTableCellRenderer.
El contenido de esta clase que hereda de DefaultTableCellRenderer es el siguiente:
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class FormatoTablaUsuarios extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent
(JTable table, Object value, boolean selected, boolean focused, int row, int column)
{
// SI EN CADA FILA DE LA TABLA LA CELDA 5 ES IGUAL A ACTIVO COLOR AZUL
if(String.valueOf(table.getValueAt(row,5)).equals("ACTIVO")) setForeground(Color.blue);
// SI NO ES ACTIVO ENTONCES COLOR ROJO
else setForeground(Color.red);
super.getTableCellRendererComponent(table, value, selected, focused, row, column);
return this;
}
}
Si queremos que sea solamente el color de una celda, pues en este caso, solamente la celda de ACTIVO o INACTIVO deberíamos poner: if(String.valueOf(table.getValueAt(row,column)).equals("ACTIVO"))
Podemos jugar con lo siguiente:
isSelected -> Si se selecciona la fila, columna, celda, etc... cambiar de color.
focused -> Si se ha hecho el foco sobre algo cambiar el color.
Y todo lo que se os ocurra.
Espero que os haya servido de ayuda y si tenéis cualquier duda sólo tenéis que preguntar :)
Un saludo.
buenas tardes amigo tengo un caso en particular, me gustaria pintar las celdas que coincidan con el value de un color y las que no de otro color, siempre y cuando la fila este seleccionada.... espero me pueda colaborar
ResponderEliminarBuenas tardes, no me llegó un aviso de que tenía un comentario pendiente.
ResponderEliminarSé que es muy tarde, pero bueno, por lo menos quería disculparme y si sigues necesitando algo, aquí andamos.
Un saludo,
pregunta, en la tabla donde implemente tu codigo tengo 8 columnas solo me pinta 3, lo curioso es que me pinta la 1,2 y 3 y deja las columnas 0,4,5,6 y 7 sin pintar.
ResponderEliminaragradeseria tu apollo.
jonnysoft.fiend@gmail.com
jonnysoft@msn.com
Me paso lo mismo, seguramente estas utilizando otro render para la misma tabla. En mi caso, usaba que en determinadas columnas me centre el contenido, entonces cuando usaba el render para pintar las filas me pintaba solamente las que no usaba el render ese, descomente el codigo ese y lo probe y anduvo bien
EliminarGracias despues de pasar toda una tarde usando los demas codigos que existen en internet, y tratar de crear mi codigo personalizado, y mucho dolor de cabeza me encontre con tu codigo y la verdad me ayudo, porque no se me habia ocurrido usar la tabla para determinar la forma en la que iba a pintar mis celdas. Ya que los demas codigos si funcionan pero solo a la primera ya si presionas click o arrastras todas tus celdas cambian de color debido a que el DefaultTableCellRenderer se vuelve a pintar afectando todas las filas!! Y eso fue un dolor de cabeza pero gracias por compartir tu codigo me fue de gran ayuda realmente!!
ResponderEliminarExcelente, explicación corta sencilla y funcional, me funciono perfecto, gracias!
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias, me ayudo bastante.
ResponderEliminarA mi me pintaba toda la tabla a pesar del if column == 4 tuve que poner el else y quedo
ResponderEliminarpublic class MyRender extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected,boolean hasFocus,int row, int column){
Component c = super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
DecimalFormat numberFormat = new DecimalFormat("#,##0.00");
if (column == 4)
{
((JLabel) c).setText(numberFormat.format(value));
c.setBackground(new Color(255,250,205));
c.setForeground(Color.BLACK);
}
else{
c.setBackground(new Color(255,255,255));
c.setForeground(Color.BLACK);
}
return c;
}
}
Gracias!!!
ResponderEliminar