ELbuild Swing custom CellRenderer
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 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.