带图标的表格头的例子
/*
* Created on 2005-12-20
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageObserver;
import javax.swing.ImageIcon;
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.JTableHeader;
import javax.swing.table.TableColumn;
/**
* @author Nobuo Tamemasa
* @version 1.0 06/19/99
*/
public class AnimatedIconHeaderExample extends JFrame {
private static Object[][] data = null;
private static String[] column = null;
public static Object[][] getData() {
if (data == null)
data = new Object[][] { { "Leopard", "Lycaon" },
{ "Jaguar", "Jackal" }, { "Cheetah", "Coyote" },
{ "Puma", "Dingo" }, { "Lynx", "Fox" }, { "Tom", "Hot" } };
return data;
}
public static String[] getColumn() {
if (column == null) {
column = new String[] { "Cat", "Dog" };
}
return column;
}
public AnimatedIconHeaderExample() {
super("AnimatedIconHeader Example");
ImageIcon[] icons = { new ImageIcon("images/3-119.gif"),
new ImageIcon("images/3-6.gif") };
DefaultTableModel model = new DefaultTableModel() {
public int getColumnCount() {
return getColumn().length;
}
public int getRowCount() {
return getData().length;
}
public String getColumnName(int col) {
return getColumn()[col];
}
public Object getValueAt(int row, int col) {
return getData()[row][col];
}
};
JTable table = new JTable(model) {
public TableColumn getColumn(Object identifier) {
System.out.println("give me a rander");
(new MyTableColumn()).creatHeaderRenderer(super
.getColumn(identifier));
return super.getColumn(identifier);
}
class MyTableColumn extends TableColumn {
private MyTableColumn() {
super();
}
/**
* @param column
*/
public void creatHeaderRenderer(TableColumn superColumn) {
if (superColumn.getHeaderRenderer() == null) {
superColumn.setHeaderRenderer(super
.createDefaultHeaderRenderer());
System.out.println("have a rander");
}
}
}
};
JTableHeader header = table.getTableHeader();
JLabel renderer;
for (int i = 0; i < model.getColumnCount(); i++) {
renderer = (JLabel) table.getColumn(model.getColumnName(i))
.getHeaderRenderer();
if (renderer != null)
renderer.setIcon(icons[i]);
else
System.out.println("nullrander");
// If you have only one column.
// icons[i].setImageObserver(header);
icons[i].setImageObserver(new HeaderImageObserver(header, i));
}
JScrollPane pane = new JScrollPane(table);
getContentPane().add(pane);
}
class HeaderImageObserver implements ImageObserver {
JTableHeader header;
int col;
HeaderImageObserver(JTableHeader header, int col) {
this.header = header;
this.col = col;
}
public boolean imageUpdate(Image img, int flags, int x, int y, int w,
int h) {
if ((flags & (FRAMEBITS | ALLBITS)) != 0) {
Rectangle rect = header.getHeaderRect(col);
header.repaint(rect);
}
return (flags & (ALLBITS | ABORT)) == 0;
}
}
public static void main(String[] args) {
AnimatedIconHeaderExample frame = new AnimatedIconHeaderExample();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(300, 140);
frame.setVisible(true);
}
}