带图标的表格头的例子

带图标的表格头的例子

/*
 * 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);
    }
}

从官方网站上当下的tame有很多例子不能使用。包里也有些方法是废弃的。整理一了下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值