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!. 

martes, 21 de diciembre de 2021

Base de datos resta un día

 

Estoy trabajando con Java 11 e hibernate 5.4.7.Final pero cuando recuperaba 

los datos de la base me restaba un día y no sabía que pasaba.

Investigue y el error era por la configuración del país, revise la configuración 

del gestor mariaDB pero estaba correcto y no funcionó, y a hibernate no se le 

pudo cambiar, así que tuve que abrir la base de datos sin hibernate 

poniéndole la zona horaria del país directamente y allí funcionó 

lo hice cómo está continuación:

 

public Connection conexionSinHibernate() {


final String url = "jdbc:mysql://localhost:3306/nombreDeLaBase"+
"?useUnicode=true&useJDBCCompliantTimezoneShift=true"+
"&useLegacyDatetimeCode=false&serverTimezone=America/Guatemala";


final String driver = "com.mysql.jdbc.Driver";


final String usuario = "usuarioDeBaseDeDatos";


final String clave = "miclave";


Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, usuario, clave);
System.out.println("Conexion Exitosa");
} catch (ClassNotFoundException ex) {
System.out.println("Error al abrir la conexion");
} catch (SQLException ex) {
System.out.println("Conexion fallida por SQL");
}
return conn;