jueves, 23 de diciembre de 2021

Cambiar fondo de la celda con el foco en JTable

 

Cómo al seleccionar una fila en una jtable quería que la celda que tuviera el 

foco fuera de un color diferente para que la persona supiera en dónde estaba. 

Entonces la mejor forma es por medio DefaultTableCellRenderer.

Debemos crear una clase que herede de DefaultTableCellRenderer como sigue:

 

en este caso le puse una letra c es solo para poder reusarla en otra jtable

pero se puede quitar. 

 

/*
* Clase para poner la celda que se esta editando en color blanco u otro
*/
package vista;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

/**
*
* @author miusuario
*/
public class ColorCeldaEditando extends DefaultTableCellRenderer {
char quePanelEditar;
Color colorDeCeldaAEditar;
public ColorCeldaEditando(char panelEditando){
//ponemos el panel editando para que ponga el color
if('c' == panelEditando){
colorDeCeldaAEditar = new Color(176,196,222);
}else{
colorDeCeldaAEditar = new Color(176,196,222);
}
}
@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(hasFocus){
setBackground(colorDeCeldaAEditar);
}
return this;
}

 

Luego para la llamada seria:

 

TablaClientes.setSelectionBackground(new Color(65,105,225));

//aqui creamos la clase que hereda de DefaultTableCellRenderer

ColorCeldaEditando ColoreaEnFoco;

//le mando una c solo para decir que es la tabla de clientes y escoger alumnos etc.
ColoreaEnFoco = new ColorCeldaEditando('c');

/*ahora colocamos la clase en la TablaClientes mandandole un Object.class y la

 recien creada clase que le cambiará el color si tiene el foco */
TablaClientes.setDefaultRenderer(Object.class,ColoreaEnFoco); 

 

¡y con eso queda lista!. 

No hay comentarios:

Publicar un comentario