Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Creating a Class-Based Custom Cell Renderer in a JTable Component

import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; public class Main {   public static void main(String[] argv) {     DefaultTableModel model = new DefaultTableModel() {       public Class getColumnClass(int mColIndex) {         int rowIndex = 0;         Object o = getValueAt(rowIndex, mColIndex);         if (o == null) {           return Object.class;         } else {           return o.getClass();         }       }     };     JTable table = new JTable(model);     model.addColumn("Col1", new Object[] { Color.red });     model.addRow(new Object[] { Color.green });     model.addRow(new Object[] { Color.blue });     table.setDefaultRenderer(Color.class, new ColorTableCellRenderer());          JFrame f = new JFrame();     f.setSize(300,300);     f.add(new JScrollPane(table));     f.setVisible(true);   } } class ColorTableCellRenderer extends JLabel implements TableCellRenderer {   Color curColor;   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,       boolean hasFocus, int rowIndex, int vColIndex) {     if (curColor instanceof Color) {       curColor = (Color) value;     } else {       curColor = table.getBackground();     }     return this;   }   public void paint(Graphics g) {     g.setColor(curColor);     g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);   } }