⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsortabletablemodel.java

📁 oraily的Swing hacks code
💻 JAVA
字号:
import java.awt.*;import java.awt.event.*;import java.awt.color.*;import javax.swing.*;import javax.swing.table.*;import javax.swing.event.*;import java.util.*;public class TestSortableTableModel extends JPanel     implements ActionListener {    DefaultTableModel myModel;    SortableTableModel mySortableModel;    JButton sort1, sort2, sort3, bonus;    static Object[] headers = {        "Letter", "Number", "Color"    };    static Object[][] data = {        {"A", new Integer(2), Color.gray.darker().darker()},        {"B", new Integer (3), Color.gray},        {"C", new Integer (1), Color.gray.darker()},    };    static Object[] bonusData = {        // "D", "0", Color.red  // this is the (buggy) book version        "D", new Integer(0), Color.red    };    public TestSortableTableModel (DefaultTableModel m) {        super (new BorderLayout());        myModel = m;        mySortableModel = new SortableTableModel (myModel);        mySortableModel.setComparatorForColumn (new MyColorComparator(), 2);        JTable table = new JTable (mySortableModel);        table.setDefaultRenderer (java.awt.Color.class, new ColorRenderer());        JScrollPane scroller =            new JScrollPane (table,                             ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,                             ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);        table.setPreferredScrollableViewportSize (new Dimension (400, 200));        setLayout(new BorderLayout());        add (scroller, BorderLayout.CENTER);        // add sort buttons        JPanel buttonPanel = new JPanel();        sort1 = new JButton ("Sort 1");        buttonPanel.add(sort1);        sort1.addActionListener(this);        sort2 = new JButton ("Sort 2");        buttonPanel.add(sort2);        sort2.addActionListener(this);        sort3 = new JButton ("Sort 3");        buttonPanel.add(sort3);        sort3.addActionListener(this);        bonus = new JButton ("More data");        buttonPanel.add(bonus);        bonus.addActionListener(this);        add (buttonPanel, BorderLayout.SOUTH);    }    public void actionPerformed (ActionEvent e) {        if (e.getSource() == sort1) {            mySortableModel.setSortColumn (0);        } else if (e.getSource() == sort2) {            mySortableModel.setSortColumn (1);        } else if (e.getSource() == sort3) {            mySortableModel.setSortColumn (2);        } else if (e.getSource() == bonus) {            myModel.addRow (bonusData);        }    }    public static void main (String[] args) {        DefaultTableModel aModel =            new DefaultTableModel(data, headers) ;        JFrame frame = new JFrame ("Sortable Table");        frame.getContentPane().add (new TestSortableTableModel(aModel),                                    BorderLayout.CENTER);        frame.pack();        frame.setVisible(true);    }    class MyColorComparator implements Comparator {        float[] hsb = new float[3];        public int compare (Object o1, Object o2) {            if ((! (o1 instanceof Color)) ||                (! (o2 instanceof Color)))                return 0;            else {                Color c1 = (Color) o1;                Color c2 = (Color) o2;                Color.RGBtoHSB ( c1.getRed(),                                 c1.getGreen(),                                 c1.getBlue(),                                 hsb);                float bright1 = hsb[2];                Color.RGBtoHSB ( c2.getRed(),                                 c2.getGreen(),                                 c2.getBlue(),                                 hsb);                float bright2 = hsb[2];                if (bright1 == bright2)                    return 0;                else                    return ((bright1-bright2) < 0) ? -1 : 1;            }        }        public boolean equals (Object obj) {            return super.equals (obj);        }    }    class ColorRenderer extends DefaultTableCellRenderer {        public Component getTableCellRendererComponent (JTable table,                                                        Object value,                                                        boolean isSelected,                                                        boolean hasFocus,                                                        int row,                                                        int col) {            Component returnMe =                 super.getTableCellRendererComponent (table, value,                                                     isSelected,                                                     hasFocus, row, col);            // background only version                        if (value instanceof Color) {                Color color = (Color) value;                returnMe.setBackground (color);                if (returnMe instanceof JLabel) {                    JLabel jl = (JLabel) returnMe;                    jl.setOpaque(true);                    jl.setText ("");                }            }            return returnMe;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -