windcao
发贴: 6
积分: 0
|
于 2005-02-25 10:05
/* (swing1.1.1beta2)*/ package tame.examples;
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).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); } }
|