viernes, 29 de enero de 2010

Pintar celda de una tabla segun su valo

  1. Hago una clase que extienda de DefaultTableCellRenderer
public class EstadoPolizaCellRenderer extends DefaultTableCellRenderer {

private static Color original;

public EstadoPolizaCellRenderer() {
//obtengo el valor por defecto del color de la letra
original = new JLabel().getForeground();
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// value trae el valor .. la columna era del tipo de la enumeracion
JLabel componente = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // llama al metodo setvalue adentro
setCellColor(componente,(EstadoPropuesta) value);
return componente;
}

@Override
protected void setValue(Object value) {
if (value instanceof EstadoPropuesta) {
setText(((EstadoPropuesta) value).getNombre());
} else {
setText(null);
}
}

private void setCellColor(JLabel componente, EstadoPropuesta valor) {
if (valor == EstadoPropuesta.ANULADA) {
componente.setForeground(Color.RED);
} else if (valor == EstadoPropuesta.CARGADA ||
valor == EstadoPropuesta.EMISION) {
componente.setForeground(Color.BLUE);
} else {
componente.setForeground(original);
}
}

}

2. en la tabla setearle el render que creamos, es por tipo de columna
tabla = new SwingTablePanel>(pagedModel) {

@Override
protected SwingTable createSwingTable(String titulo, SwingTableModel> modelo) {
SwingTable tablaLocal = super.createSwingTable(titulo, modelo);
tablaLocal.getTabla().setDefaultRenderer(EstadoPropuesta.class, new EstadoPolizaCellRenderer());
return tablaLocal;
}
}

martes, 12 de enero de 2010

Swing Select

localidad = new SwingSelect("Localidad","nombre",Localidad.class,1,new SwingSelectFilter() {

public List buscar(String texto) {
return LocalidadManager.getControl().listarLocalidades(texto);
}
});

localidad.addColumn(new Columna("Código", "codigo",int.class));
add(localidad);

Funciones Utiles COMMONS Apache

  • Copiar OBjetos. copia todos los atributos de un obejeto a otro: Si queremos clonar el objeto despues de esto le cambiamos el id al nuevo
    BeanUtils.copyProperties(poliza, polizaExistente);

Like con campos enteros JPQL

Hay un artilugio para poder usar like en campos enteros , es concatenando una cadena vacia al entero esto lo combierte el campo a cadena y puedo usar el Like normalmente.
La fucion en jpql quedaria: CONCAT(campoint,'');

EJ:

return em.createQuery("select p from Localidad p Where UPPER(p.nombre) Like :texto " + " OR UPPER(CONCAT(p.codigo,'')) Like :texto order by p.nombre")
.setParameter("texto", texto.toUpperCase() +'%').getResultList();