📄 testsortabletablemodel.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 + -