Swing JTable 表格排序jdk1.5与1.6

来源:互联网 发布:软件测试基础知识大全 编辑:程序博客网 时间:2024/05/18 01:11

jdk1.5表格排序

 

public class TableSort { final static Icon upIcon = new UpDownArrow(0);     final static Icon downIcon = new UpDownArrow(1);         private boolean ascending=false;     private TableModel model;         private int sortColumn=-1;     public static void main(String[] args) { new TableSort().init(); }         private void init()     {     List<Object[]> list = new Vector<Object[]>(); Object[] obj = null; for(int i=0;i<50;i++) { obj = new Object[3]; String s=""; if(i%2==0) { s ="aw"; } else { s="3e"; } obj[0]="name"+s; obj[1]= i+(123/(i+1))+2; obj[2]=i+17.0169/(i+1)*1.1347; list.add(obj); } String[] names ={"姓名","学号","成绩"}; model = new TableModel(names,0); model.addData(list); final JTable table = new JTable(model); // TableRowSorter<TableModel> sort = new TableRowSorter<TableModel>(model); // CompareTo to = new CompareTo(); // for(int i=0;i<names.length;i++) // { // sort.setComparator(i,to); // } //SortManager sortManager = new SortManager(table); // table.setRowSorter(sort); DefaultTableCellRenderer defaultHeaderRenderer = new SortHeaderRenderer();         defaultHeaderRenderer.setHorizontalAlignment(0);         defaultHeaderRenderer.setHorizontalTextPosition(JLabel.LEFT);         JTableHeader jtableheader = table.getTableHeader();         jtableheader.setDefaultRenderer(defaultHeaderRenderer);         addListener(table); JScrollPane js = new JScrollPane(table); JFrame frame = new JFrame(); frame.getContentPane().add(js); frame.setSize(400, 300); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame.pack(); frame.setVisible(true);     }         public void addListener(final JTable table)     {     table.getTableHeader().addMouseListener(new MouseAdapter() {             public void mouseClicked(MouseEvent mouseevent) {                 int i = table.columnAtPoint(mouseevent.getPoint());                 int j = table.convertColumnIndexToModel(i);                 //转换出用户想排序的列和底层数据的列,然后判断                 if (j == sortColumn) {                     ascending = !ascending;                 } else {                     ascending = true;                     sortColumn = j;                 }                 model.sort(ascending, sortColumn);                 table.revalidate();                 table.repaint();                             }         });     } //jdk1.5表头渲染器  class SortHeaderRenderer extends DefaultTableCellRenderer {         public SortHeaderRenderer()     {         }         public Component getTableCellRendererComponent(JTable jtable,                 Object obj, boolean flag, boolean flag1, int i, int j) {             if (jtable != null) {                 JTableHeader jtableheader = jtable.getTableHeader();                 if (jtableheader != null) {                     setForeground(jtableheader.getForeground());                     setBackground(jtableheader.getBackground());                     setFont(jtableheader.getFont());                 }             }             setText(obj != null ? obj.toString() : "");             int col = jtable.convertColumnIndexToModel(j);             if (col == sortColumn) {                             setIcon(ascending ? TableSort.upIcon : TableSort.downIcon);             } else {                 setIcon(null);             }             setBorder(UIManager.getBorder("TableHeader.cellBorder"));             return this;         }     }     } //表格模型 class TableModel extends DefaultTableModel { List<Object[]> dataLst = new ArrayList<Object[]>(); private Compare compare = new Compare(); public TableModel(String[] tableHeaders,int count) { super(tableHeaders,count); } @Override public Object getValueAt(int row, int col) { if(dataLst.size()>0) { Object[] obj = dataLst.get(row); return obj[col]; } return ""; } @Override public boolean isCellEditable(int row, int column) { return false; } @Override public int getRowCount() { if(null != dataLst) {     return dataLst.size(); } return 0; } public void sort(boolean desc,int col) { compare.setDes(desc); compare.setCol(col); java.util.Collections.sort(this.dataLst,compare); } public void addData(List<Object[]> objLst) { dataLst.addAll(objLst); this.fireTableDataChanged(); } } //jdk1.5排序比较器 class Compare implements Comparator { private boolean des; private int col; public Compare() { this(true,0); } public Compare(boolean des,int col) { this.des = des; this.col = col; } @Override public int compare(Object o1, Object o2) { int result = 0; if(!(o1 instanceof  Object[] )&& !(o2 instanceof  Object[])) { return -1; } else { Object[] l1=(Object[])o1; Object[] l2=(Object[])o2; Object oo1 = l1[col]; Object oo2 = l2[col]; if(oo1.getClass()==String.class && oo2.getClass()==String.class) { String obj1=(String)oo1; String obj2=(String)oo2; result = obj1.compareTo(obj2); } else if(oo1.getClass()==Double.class && oo2.getClass()==Double.class) { Double obj1=(Double)oo1; Double obj2=(Double)oo2; double t = obj1-obj2; if(t>0.00000) { result = 1; } else if(t<0.00000) { result = -1; } } else { Integer obj1=(Integer)oo1; Integer obj2=(Integer)oo2; result = obj1-obj2; } } if(!des) { result = -result; } return result; } public boolean isDes() { return des; } public void setDes(boolean des) { this.des = des; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } } //jdk1.6排序比较器 class CompareTo implements Comparator { public CompareTo() { } @Override public int compare(Object o1, Object o2) { int result = 0; if(o1.getClass() != o2.getClass()) { return -1; } else { if(o1.getClass()==String.class && o2.getClass()==String.class) { String obj1=(String)o1; String obj2=(String)o2; result = obj1.compareTo(obj2); } else if(o1.getClass()==Double.class && o2.getClass()==Double.class) { Double obj1=(Double)o1; Double obj2=(Double)o2; double t = obj1-obj2; if(t>0.00000) { result = 1; } else if(t<0.00000) { result = -1; } } else { Integer obj1=(Integer)o1; Integer obj2=(Integer)o2; result = obj1-obj2; } } return result; } } //绘制排序图标 class UpDownArrow implements Icon {     private  int size = 12;     public static final int UP = 0;     public static final int DOWN = 1;     private int direction;     public UpDownArrow(int i) {         direction = i;     }     public int getIconHeight() {         return size;     }     public int getIconWidth() {         return size;     }     public void paintIcon(Component component, Graphics g, int i, int j) {         int x1 = i + size / 2;         int x = i + 1;         int z = (i + size) - 2;         int y = j + 1;         int y1 = (j + size) - 2;         Color color = (Color) UIManager.get("controlDkShadow");         //画三角形,方向向上         if (direction == 0) {             g.setColor(Color.white);             g.drawLine(x, y1, z, y1);             g.drawLine(z, y1, x1, y);             g.setColor(color);             g.drawLine(x, y1, x1, y);         } else {             g.setColor(color);             g.drawLine(x, y, z, y);             g.drawLine(x, y, x1, y1);             g.setColor(Color.white);             g.drawLine(z, y, x1, y1);         }         //g.dispose();     } } 

jdk1.6表格排序 修改上面文件的init()方法即可

private void init()     {     List<Object[]> list = new Vector<Object[]>(); Object[] obj = null; for(int i=0;i<50;i++) { obj = new Object[3]; String s=""; if(i%2==0) { s ="aw"; } else { s="3e"; } obj[0]="name"+s; obj[1]= i+(123/(i+1))+2; obj[2]=i+17.0169/(i+1)*1.1347; list.add(obj); } String[] names ={"姓名","学号","成绩"}; model = new TableModel(names,0); model.addData(list); final JTable table = new JTable(model); TableRowSorter<TableModel> sort = new TableRowSorter<TableModel>(model); CompareTo to = new CompareTo(); for(int i=0;i<names.length;i++) { sort.setComparator(i,to); } table.setRowSorter(sort); // DefaultTableCellRenderer defaultHeaderRenderer = new SortHeaderRenderer(); //        defaultHeaderRenderer.setHorizontalAlignment(0); //        defaultHeaderRenderer.setHorizontalTextPosition(JLabel.LEFT); //        JTableHeader jtableheader = table.getTableHeader(); //        jtableheader.setDefaultRenderer(defaultHeaderRenderer); //        addListener(table); JScrollPane js = new JScrollPane(table); JFrame frame = new JFrame(); frame.getContentPane().add(js); frame.setSize(400, 300); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame.pack(); frame.setVisible(true);     } 

原创粉丝点击