Swing Background cella condizionale al contenuto – Esempio custom CellRenderer

java-swing-java-tablecellrenderer

ELbuild Swing custom CellRenderer

java-swing-java-tablecellrenderer
Swing Table

Il framework Swing, sebbene abbia fallito la standardizzazione JSR, conserva di fatto il ruolo di standard de-facto per lo sviluppo di applicazioni desktop in Java. La facilità di modifica del look and feel dei componenti è uno dei punti di forza di questo framework.

Vediamo in questo post una classe che implementa l’interfaccia TableCellRenderer per rendere possibile allo sviluppatore la selezione di un colore di background basato sul contenuto della cella stessa.

In particolare con questa classe, assumendo di conoscere il tipo di oggetto alla base del table model, è possibile modificare il background della cella in base ad una qualsiasi proprietà dell’oggetto stesso.

In questo esempio vediamo come colorare di rosso il background delle celle della colonna  4 che contengono un oggetto date rappresentante un istante di tempo più di OBSOLETE_DAYS giorni nel passato.

package it.elbuild.blog.tutorial;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/**
 *
 * @author Luca Adamo, luca.adamo@elbuild.it
 */
public class CustomCartelleTableRenderer extends JLabel
 implements TableCellRenderer {

private static final Integer DATE_COLUMN = 4;
 private static final Integer OBSOLETE_DAYS = 60;
 private static final Color BGCOLOR = Color.RED;

public CustomCartelleTableRenderer() {
 setOpaque(true); //it MUST be set for background to show up.
 }

public Component getTableCellRendererComponent(
 JTable table, Object color,
 boolean isSelected, boolean hasFocus,
 int row, int column) {

 if(column == DATE_COLUMN){
 Object val = table.getValueAt(row, column);

if(!(val instanceof java.util.Date)){
 ; // DO NOTHING OR USE DEFAULT BACKGROUND
 } else {
 if (isObsolete((java.util.Date)val)){
 setBackground(BGCOLOR);
 }
 }
 }
 return this;
 }

// dummy check
 private boolean isObsolete(java.util.Date d){
 return ((System.currentTimeMillis() - OBSOLETE_DAYS * 24 * 60 * 60 * 1000l) - d.getTime()) > 0;
 }
}

ELbuild, consulenza e sviluppo software desktop

ELbuild, consulenza Java
ELbuild

ELbuild utilizza il framework Swing per lo sviluppo di applicazioni desktop multipiattaforma in Java. Gestionali ed applicazioni di utilità, eventualmente interfacciate a RDBMS MySQL o SQLite.

Contattaci per sapere come possiamo realizzare il gestionale su misura in grado di aumentare l’efficienza dei processi produttivi della tua azienda.

Autore: Luca Adamo

Luca Adamo si è laureato con lode in Ingegneria delle Telecomunicazioni all'Università degli studi di Firenze ed è dottorando in Ingegneria Informatica, Multimedialità e Telecomunicazioni, sempre nella stessa facoltà. Le sue competenze tecniche includono lo sviluppo software, sia orientato al web che desktop, in C/C++ e Java (J2EE, J2SE, J2ME), l'amministrazione di macchine Unix-based, la gestione di reti di telecomunicazioni, ed il design di database relazionali.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *