import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class TableAnimationDemo extends JFrame {
private JTable table;
public TableAnimationDemo() {
table = new JTable(new Object[][] { { "Job1 finished ", 0 },
{ "Job2 delayed", 1 }, { "Job3 running", 2 } }, new String[] {
"Job", "Status" });
table.getColumnModel().getColumn(1).setCellRenderer(new StatusCellRenderer());
this.getContentPane().add(new JScrollPane(table));
new Thread(new Runnable() {
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
int value = Integer.parseInt(table.getValueAt(1, 1).toString());
value *=-1;
table.setValueAt(value, 1, 1);
}
}
}).start();
}
public static void main(String[] args) {
JFrame frame = new TableAnimationDemo();
frame.setBounds(0, 0, 500, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
class StatusCellRenderer extends DefaultTableCellRenderer {
ImageIcon img1, img2;
public StatusCellRenderer() {
img1 = new ImageIcon(getDotImage(Color.GREEN.darker()));
img2 = new ImageIcon(getDotImage(Color.RED));
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
int i = Integer.parseInt(value.toString());
if (i==0)
this.setIcon(img1);
else if (i==1)
this.setIcon(img2);
else
this.setIcon(null);
this.setText("");
return this;
}
}
public static Image getDotImage(Color color) {
BufferedImage image = new BufferedImage(10, 10,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 10, 10);
g.setColor(color);
g.fillOval(1, 1, 8, 8);
return image;
}
}