www.pudn.com > JTable > IndicatorTableExample.java
/* (swing1.1) */
//package jp.gr.java_conf.tame.swing.examples;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
//import jp.gr.java_conf.tame.swing.table.*;
/**
* @version 1.0 03/03/99
*/
public class IndicatorTableExample extends JPanel {
private static final int MAX = 100;
private static final int MIN = 0;
public IndicatorTableExample(){
setLayout(new BorderLayout());
DefaultTableModel dm = new DefaultTableModel() {
public Class getColumnClass(int row,int col) {
/* switch (col) {
case 0: return String.class;
case 1: return Integer.class;
case 2: return Integer.class;
default: return Object.class;
}*/
Vector v = (Vector)dataVector.elementAt(0);
return v.elementAt(col).getClass();
}
public boolean isCellEditable(int row, int col) {
/* switch (col) {
case 2: return false;
default: return true;
}*/
//Class columnClass = getColumnClass(col);
//return columnClass != Integer.class;
if(getColumnClass(row,col)==ImageIcon.class)
return false;
else
return true;
}
public void setValueAt(Object obj, int row, int col) {
if (col != 1) {
super.setValueAt(obj, row, col);
return;
}
try {
Integer integer = new Integer(obj.toString());
super.setValueAt(checkMinMax(integer), row, col);
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
};
dm.setDataVector(new Object[][]{
{"ordinary guy",new Integer(100),new Integer(100)},
{new ImageIcon("test.jpg") ,new Integer( 76),new Integer( 76)},
{"ordinary guy",new Integer( 51),new Integer( 51)},
{"lazy fellow" ,new Integer( 12),new Integer( 12)}},
new Object[]{"Name","Result","Indicator"});
JTable table = new JTable(dm);
IndicatorCellRenderer renderer = new IndicatorCellRenderer(MIN,MAX);
renderer.setStringPainted(true);
renderer.setBackground(table.getBackground());
// set limit value and fill color
Hashtable limitColors = new Hashtable();
limitColors.put(new Integer( 0), Color.green);
limitColors.put(new Integer(60), Color.yellow);
limitColors.put(new Integer(80), Color.red);
renderer.setLimits(limitColors);
table.getColumnModel().getColumn(2).setCellRenderer(renderer);
table.getModel().addTableModelListener(new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
if (e.getType() == TableModelEvent.UPDATE)
{
int col = e.getColumn();
if (col == 1)
{
int row = e.getFirstRow();
TableModel model = (TableModel)e.getSource();
Integer value = (Integer)model.getValueAt(row, col);
model.setValueAt(checkMinMax(value), row, ++col);
}
}
}
});
JScrollPane pane = new JScrollPane(table);
add(pane, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame f= new JFrame("IndicatorTable Example");
f.getContentPane().add(new IndicatorTableExample(), BorderLayout.CENTER);
f.setSize(400, 120);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
}
private Integer checkMinMax(Integer value)
{
int intValue = value.intValue();
if (intValue < MIN)
{
intValue = MIN;
}
else if (MAX < intValue)
{
intValue = MAX;
}
return new Integer(intValue);
}
}