博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jtable 表格按多列排序(支持中文汉字排序)
阅读量:5329 次
发布时间:2019-06-14

本文共 33925 字,大约阅读时间需要 113 分钟。

  这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求。由于我是大神,所以必须做了出来。ok,不自恋了,先上效果图,然后上代码,最后上项目。这也将是我以后的一贯风格,懂得分享才能走的更高!

 
  简单描述一下,瞅准某列,第一次点击升序,第二次点击降序,第三次点击取消排序。图为先按密码升序,然后按用户名升序,最后按年龄降序。
 
  一、 准备工作,及整体思路
 
  我的环境,jdk1.6,jdk1.7,jdk1.8均测试过。公司用的是1.6,本人上传此博客的环境为1.8。IDE 工具Eclipse Jee Neon,TableModel,List<T>。
  思路:新建frame,new Jtable(我用的是tableModel创建的方式),设置Jtable样式,给Jtable绑定表头排序事件,给Jtable绑定表头图标事件。在表头排序事件中将要排序列名传递给排序工具类(此工具类主要作用是维护哪几列用来排序,别着急,下面有代码),然后按此列进行排序,实现一个排序用的comparator类(自定义排序,当做int来排序,String排序,Long排序等)。
 
 
  二、代码
 
  1. 主类(new frame)
1 package com.test.order; 2  3 import java.awt.Dimension; 4  5 public class TableOrder3Test { 6 //    private static int width = 600; 7 //    private static int height = 600; 8      9     public static void main(String[] args) {10         displayTable();11         12     }13     14     public static void displayTable(){15         SwingUtilities.invokeLater(new Runnable() {16             public void run() {17                 // 设置程序界面外观18                 try {19                     UIManager20                             .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");21                 } catch (Exception localException1) {22                     try {23                         UIManager.setLookAndFeel(UIManager24                                 .getSystemLookAndFeelClassName());25                     } catch (Exception localException2) {26                         localException2.printStackTrace();27                     }28                 }    29                 30                 JFrame tableFrame = new JFrame("表格排序");31                 32                 TableOrder3Table order3Talbe = new TableOrder3Table();33                 34                 tableFrame.setContentPane(new JScrollPane(order3Talbe.initUI()));35                 36                 Toolkit kit = Toolkit.getDefaultToolkit();//获得窗口超类37                 Dimension dim = kit.getScreenSize();//获得当前屏幕38 //                tableFrame.setLocation(((int)dim.getWidth()-width)/2,39 //                        (int)(dim.getHeight()-height)/2);//设置frame距离左和上的偏移量,即窗口显示的位置40 //                tableFrame.setLocationRelativeTo(null);41                 tableFrame.setSize(dim);//调整屏幕大小42 //                tableFrame.setSize(200, 200);//调整屏幕大小43                 tableFrame.setResizable(true);//是否可调整大小44                 tableFrame.setVisible(true);//是否显示45                 tableFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//按叉之后执行哪个操作46             }47         });    48     }49 }

 

  2. 关于Jtable类的代码(下面的3,4,5,6,7中的类都将在此类中出现,注意它们在此类中的角色)
1 package com.test.order;  2   3 import java.awt.Component;  4   5 public class TableOrder3Table{  6       7     private TableOrder3TableMode tabelMode;  8     private JTable order3Table;  9     private List
userList; 10 private TableOrderSorter tableOrderSorterUtil; 11 12 public JTable initUI(){ 13 14 getData(); 15 tabelMode = new TableOrder3TableMode(userList);//获取model 16 order3Table = new JTable(); 17 order3Table.setModel(tabelMode);//设置model 18 addHeaderEvent();//添加对表头排序事件 19 setSorterIconToTableHeader(order3Table.getTableHeader());//添加表头排序图标 20 return order3Table; 21 } 22 23 /** 24 * 添加对表头排序事件 25 */ 26 public void addHeaderEvent(){ 27 order3Table.getTableHeader().addMouseListener(new MouseAdapter() { 28 @Override 29 public void mouseClicked(MouseEvent evt) { 30 if(evt.getButton() == MouseEvent.BUTTON1 && evt.getClickCount() == 1){ //判断左键右键,点击了几次 31 int selectedColumn = order3Table.getTableHeader().columnAtPoint(evt.getPoint());//得到该鼠标点击列的column,从0开始 32 String sortColumn = tabelMode.getColumnObjectName(selectedColumn);//获得排序列名 33 SorterColumnGroupUtil.setColumn(sortColumn);//设置排序列,SorterColumnGroupUtil类便是用来维护排序列的工具类 34 userSort();//表格列排序 35 } 36 } 37 }); 38 } 39 40 /** 41 * 为表格表头添加排序图标 42 * @param tableHeader 43 */ 44 @SuppressWarnings("serial") 45 public void setSorterIconToTableHeader(JTableHeader tableHeader) { 46 tableHeader.setDefaultRenderer(new DefaultTableCellRenderer(){
//添加tableheader渲染器 47 48 private Font TABLE_FONT = new Font("宋体", Font.PLAIN, 15); 49 @Override 50 public Component getTableCellRendererComponent(JTable table, 51 Object value, boolean isSelected, boolean hasFocus, int row, int column) { 52 JButton btn = new TableHeaderButton();//JideTool.newJideButton(); 53 btn.setText(value == null ? "" : value.toString()); 54 btn.setFont(TABLE_FONT); 55 String sortColumnName =""; 56 sortColumnName = tabelMode.getColumnObjectName(column); 57 if(sortColumnName.equals(SorterColumnGroupUtil.getColumn1())){ 58 if (Constant.ASC.equals(SorterColumnGroupUtil.getColumn1Asc())) { 59 btn.setIcon(getIconResource("arr-up1.png")); 60 } else if (Constant.DESC.equals(SorterColumnGroupUtil.getColumn1Asc())){ 61 btn.setIcon(getIconResource("arr-down1.png")); 62 } 63 }else if(sortColumnName.equals(SorterColumnGroupUtil.getColumn2())){ 64 if (Constant.ASC.equals(SorterColumnGroupUtil.getColumn2Asc())) { 65 btn.setIcon(getIconResource("arr-up2.png")); 66 } else if (Constant.DESC.equals(SorterColumnGroupUtil.getColumn2Asc())){ 67 btn.setIcon(getIconResource("arr-down2.png")); 68 } 69 }else if(sortColumnName.equals(SorterColumnGroupUtil.getColumn3())){ 70 if (Constant.ASC.equals(SorterColumnGroupUtil.getColumn3Asc())) { 71 btn.setIcon(getIconResource("arr-up3.png")); 72 } else if (Constant.DESC.equals(SorterColumnGroupUtil.getColumn3Asc())){ 73 btn.setIcon(getIconResource("arr-down3.png")); 74 } 75 } 76 return btn; 77 } 78 }); 79 } 80 81 /** 82 * 稍稍封装了获得icon的过程,默认搜索 83 */ 84 public static ImageIcon getIconResource(String iconName) 85 { 86 return new ImageIcon("icon/"+iconName); 87 } 88 89 /** 90 * 表格列排序 91 */ 92 public void userSort() { 93 Collections.sort(tabelMode.getList(), getOrderTableSorter());//将要排序的数据及自定义的排序类传给Collections 94 order3Table.updateUI(); 95 } 96 97 /** 98 * 获得排序类接口 99 * @return100 */101 public TableOrderSorter getOrderTableSorter(){102 if(tableOrderSorterUtil == null){103 tableOrderSorterUtil = new TableOrderSorter();104 }105 return tableOrderSorterUtil;106 }107 108 /**109 * 设置表格样式110 */111 public void setStyle(){112 order3Table.getColumnModel().getColumn(2).setPreferredWidth(10); 113 order3Table.setRowHeight(25);114 }115 116 /**117 * 添加对表格内容的事件118 */119 public void addEvent(){120 order3Table.addMouseListener(new java.awt.event.MouseAdapter(){121 public void mouseClicked(MouseEvent e) {
//仅当鼠标单击时响应122 //得到选中的行列的索引值123 int r= order3Table.getSelectedRow();124 int c= order3Table.getSelectedColumn();125 //得到选中的单元格的值,表格中都是字符串126 Object value= order3Table.getValueAt(r, c);127 String info=r+"行"+c+"列值 : "+value.toString();128 javax.swing.JOptionPane.showMessageDialog(null,info);129 }130 });131 }132 133 /**134 * 获取模拟数据135 */136 public void getData(){137 userList = new ArrayList
();138 User user1 = new User(1, "大元帅", "哈", 18, "ddd", "eee"); 139 User user2 = new User(11, "帅帅", "bbb", 18, "drdfrt", "aba"); 140 User user3 = new User(10, "阿哥好帅", "dsd", 18, "dnca", "aba"); 141 User user4 = new User(2, "巴拉拉", "sdf", 18, "wer", "aba"); 142 User user5 = new User(3, "小魔仙", "abc", 18, "gm", "aba"); 143 User user6 = new User(5, "嘚嘚", "sd", 20, "dsz", "aba"); 144 User user7 = new User(21, "服啦服啦", "ddd", 21, "nhd", "aba"); 145 User user8 = new User(22, "啦啦", "bbb", 22, "dhsa", "aba"); 146 userList.add(user1);147 userList.add(user2);148 userList.add(user3);149 userList.add(user4);150 userList.add(user5);151 userList.add(user6);152 userList.add(user7);153 userList.add(user8);154 }155 }

 

  3. 关于tableModel的代码

1 package com.test.order;  2   3 import java.util.List;  4   5   6 public class TableOrder3TableMode implements TableModel{  7   8     private List
userList; 9 10 public TableOrder3TableMode(List
userList){ 11 this.userList = userList; 12 } 13 14 @Override 15 public Class
getColumnClass(int columnIndex) { 16 return String.class; 17 } 18 19 @Override 20 public int getColumnCount() { 21 22 return 6; 23 } 24 25 @Override 26 public int getRowCount() { 27 return userList.size(); 28 } 29 30 @Override 31 public String getColumnName(int columnIndex) { 32 if(columnIndex == 0) 33 return "id"; 34 if(columnIndex == 1) 35 return "用户名"; 36 if(columnIndex == 2) 37 return "密码"; 38 if(columnIndex == 3) 39 return "年龄"; 40 if(columnIndex == 4) 41 return "邮箱"; 42 if(columnIndex == 5) 43 return "地址"; 44 else return null; 45 46 } 47 48 @Override 49 public Object getValueAt(int rowIndex, int columnIndex) { 50 User user = userList.get(rowIndex); 51 if(columnIndex == 0) 52 return user.getId(); 53 if(columnIndex == 1) 54 return user.getUserName(); 55 if(columnIndex == 2) 56 return user.getUserPassword(); 57 if(columnIndex == 3) 58 return user.getAge(); 59 if(columnIndex == 4) 60 return user.getEmail(); 61 if(columnIndex == 5) 62 return user.getAddress(); 63 return null; 64 } 65 66 /** 67 * 如果表格可以编辑,当编辑完按下enter后则会自动调用该方法 68 */ 69 @Override 70 public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 71 String s="Change at: "+rowIndex+"--- "+columnIndex+" newValue: "+aValue; 72 System.out.println(s); 73 74 } 75 76 @Override 77 public boolean isCellEditable(int rowIndex, int columnIndex) { 78 if(columnIndex == 0) 79 return false; 80 return true; 81 } 82 83 @Override 84 public void removeTableModelListener(TableModelListener l) { 85 // TODO Auto-generated method stub 86 87 } 88 @Override 89 public void addTableModelListener(TableModelListener l) { 90 // TODO Auto-generated method stub 91 92 } 93 94 public List
getList(){ 95 return this.userList; 96 } 97 98 public String getColumnObjectName(int columnIndex) { 99 if(columnIndex == 0)100 return User.ID; 101 if(columnIndex == 1)102 return User.USERNAME;103 if(columnIndex == 2)104 return User.USERPASSWORD;105 if(columnIndex == 3)106 return User.AGE;107 if(columnIndex == 4)108 return User.EMAIL;109 if(columnIndex == 5)110 return User.ADDRESS;111 else return null;112 }113 114 115 }

  4. 维护排序列的类(SorterColumnGroupUtil)

  类的主要作用及思路:维护排序列,最多支持3列同时排序。当收到列名时,首先判断(第一主列==null),如果为空,则将该列名设为第一主列;否则判断(!=第一主列 && 第二主列==null),是则设为第二主列;否则判断(!=第一主列 && !=第二主列 && 第三主列==null),是则设为第三主列;否则则说明三个主列都有了。接下来就是判断是否等于三个主列中的其中一个,如果不等于,说明三大主列已经满了,什么都不用做。如果等于,然后判断它是升序还是降序,是升序就将它变成降序,是降序将该主列清空,后面的主列向前面的主列移动。

1 package com.test.order.orderutil; 2  3 public class SorterColumnGroupUtil { 4      5      6 private static String[][] sorterArray = new String[3][2];//排序列数组  7      8     public static String getColumn1(){
//获得第一主排序列名 9 return sorterArray[0][0]; 10 }11 public static String getColumn2(){
//获得第二主排序列名12 return sorterArray[1][0];13 }14 public static String getColumn3(){
//获得第三主排序列名15 return sorterArray[2][0];16 }17 public static String getColumn1Asc(){
//获得第一主排序的升降序18 return sorterArray[0][1]; 19 }20 public static String getColumn2Asc(){
//获得第二主排序的升降序21 return sorterArray[1][1]; 22 }23 public static String getColumn3Asc(){
//获得第三主排序的升降序24 return sorterArray[2][1]; 25 }26 27 //设置排序列28 public static void setColumn(String columnName){29 if(columnName != null){
//第一主排序不为null,则将该列设为第一主排序,默认升序30 if(sorterArray[0][0] == null){31 sorterArray[0][0] = columnName;32 sorterArray[0][1] = Constant.ASC;33 }else if(sorterArray[1][0] == null && !sorterArray[0][0].equals(columnName)){
//有第一主排序,且第二主排序不为null,则将该列设为第二主排序,默认升序34 sorterArray[1][0] = columnName;35 sorterArray[1][1] = Constant.ASC;36 }else if(sorterArray[2][0] == null && !sorterArray[0][0].equals(columnName) && !sorterArray[1][0].equals(columnName)){
//有第一和第二主排序,且第二主排序不为null,则将该列设为第二主排序,默认升序37 sorterArray[2][0] = columnName;38 sorterArray[2][1] = Constant.ASC; 39 }else{40 if(columnName.equals(sorterArray[0][0])){
//如果等于第一主排序,则讲第一主排序降序41 if(Constant.ASC.equals(sorterArray[0][1])){42 sorterArray[0][1] = Constant.DESC;43 }else if(Constant.DESC.equals(sorterArray[0][1])){
//第一主排序为降序,则去掉第一主排序,二变一,三变二,三为空44 sorterArray[0][0] = sorterArray[1][0];45 sorterArray[0][1] = sorterArray[1][1];46 47 sorterArray[1][0] = sorterArray[2][0];48 sorterArray[1][1] = sorterArray[2][1];49 50 sorterArray[2][0] = null;51 sorterArray[2][1] = null; 52 }53 }else if(columnName.equals(sorterArray[1][0]) ){
//第二主排序 同理54 if(Constant.ASC.equals(sorterArray[1][1])){55 sorterArray[1][1] = Constant.DESC;56 }else if(Constant.DESC.equals(sorterArray[1][1])){57 sorterArray[1][0] = sorterArray[2][0];58 sorterArray[1][1] = sorterArray[2][1];59 60 sorterArray[2][0] = null;61 sorterArray[2][1] = null;62 }63 }else if(columnName.equals(sorterArray[2][0])){
//第三主排序64 if(Constant.ASC.equals(sorterArray[2][1])){65 sorterArray[2][1] = Constant.DESC;66 }else if(Constant.DESC.equals(sorterArray[2][1])){ 67 sorterArray[2][0] = null;68 sorterArray[2][1] = null;69 }70 } 71 } 72 } 73 }74 }

  5. 自定义排序类,实现了comparator的类

     5.1 TableOrderSorter

1 package com.test.order; 2  3 import java.util.Comparator; 4  5 public class TableOrderSorter implements Comparator
{ 6 7 @Override 8 public int compare(User o1, User o2) { 9 return SorterUtil.compare(o1, o2);10 }11 }

    5.2 SorterUtil

1 package com.test.order.orderutil;  2   3 import java.lang.reflect.Method;  4   5 public class SorterUtil {  6       7     public static int compare(Object o1, Object o2) {  8         Object o1sorterColumn1 = getFieldByReflect(o1,SorterColumnGroupUtil.getColumn1());  //得到o1 对象的第一主排序列  9         Object o1sorterColumn2 = getFieldByReflect(o1,SorterColumnGroupUtil.getColumn2());  //得到o1 对象的第二主排序列 10         Object o1sorterColumn3 = getFieldByReflect(o1,SorterColumnGroupUtil.getColumn3());   //得到o1 对象的第三主排序列      11         Object o2sorterColumn1 = getFieldByReflect(o2,SorterColumnGroupUtil.getColumn1());   //得到o2 对象的第一主排序列 12         Object o2sorterColumn2 = getFieldByReflect(o2,SorterColumnGroupUtil.getColumn2());   //得到o2 对象的第二主排序列 13         Object o2sorterColumn3 = getFieldByReflect(o2,SorterColumnGroupUtil.getColumn3());   //得到o2 对象的第三主排序列        14         Object sorterColumnAsc1 = SorterColumnGroupUtil.getColumn1Asc();  //第一主排序列 15         Object sorterColumnAsc2 = SorterColumnGroupUtil.getColumn2Asc();  //第二主排序列 16         Object sorterColumnAsc3 = SorterColumnGroupUtil.getColumn3Asc();  //第三主排序列 17         if(sorterColumnAsc1 != null){
//判断 1主 18 if(Constant.ASC.equals(sorterColumnAsc1)){
//1 主升 19 if(sorterColumnAsc2 != null){
//判断 2主 20 if(Constant.ASC.equals(sorterColumnAsc2)){
//2 主升 21 if(sorterColumnAsc3 != null){
//判断3主 22 if(Constant.ASC.equals(sorterColumnAsc3)){
//3 主升 23 return compareAsc(o1sorterColumn1,o2sorterColumn1) == 0?(compareAsc(o1sorterColumn2,o2sorterColumn2) == 0? 24 compareAsc(o1sorterColumn3,o2sorterColumn3) 25 :compareAsc(o1sorterColumn2,o2sorterColumn2)) 26 :compareAsc(o1sorterColumn1,o2sorterColumn1);//1升 2升 3升 27 }else if(Constant.DESC.equals(sorterColumnAsc3)){
//3主降 28 return compareAsc(o1sorterColumn1,o2sorterColumn1) == 0?(compareAsc(o1sorterColumn2,o2sorterColumn2) == 0? 29 compareDesc(o1sorterColumn3,o2sorterColumn3) 30 :compareAsc(o1sorterColumn2,o2sorterColumn2)) 31 :compareAsc(o1sorterColumn1,o2sorterColumn1);//1升 2升 3降 32 } 33 }else{
//无 3主 34 return compareAsc(o1sorterColumn1,o2sorterColumn1) == 0?(compareAsc(o1sorterColumn2,o2sorterColumn2)) 35 :compareAsc(o1sorterColumn1,o2sorterColumn1);//1升 2升 36 } 37 }else if(Constant.DESC.equals(sorterColumnAsc2)){
//2主降 38 if(sorterColumnAsc3 != null){
//判断3主 39 if(Constant.ASC.equals(sorterColumnAsc3)){
//3 主升 40 return compareAsc(o1sorterColumn1,o2sorterColumn1) == 0?(compareDesc(o1sorterColumn2,o2sorterColumn2) == 0? 41 compareAsc(o1sorterColumn3,o2sorterColumn3) 42 :compareDesc(o1sorterColumn2,o2sorterColumn2)) 43 :compareAsc(o1sorterColumn1,o2sorterColumn1);//1升 2降 3升 44 }else if(Constant.DESC.equals(sorterColumnAsc3)){
//3主降 45 return compareAsc(o1sorterColumn1,o2sorterColumn1) == 0?(compareDesc(o1sorterColumn2,o2sorterColumn2) == 0? 46 compareDesc(o1sorterColumn3,o2sorterColumn3) 47 :compareDesc(o1sorterColumn2,o2sorterColumn2)) 48 :compareAsc(o1sorterColumn1,o2sorterColumn1);//1升 2降 3降 49 } 50 }else{
//无 3主 51 return compareAsc(o1sorterColumn1,o2sorterColumn1) == 0?compareDesc(o1sorterColumn2,o2sorterColumn2) 52 :compareAsc(o1sorterColumn1,o2sorterColumn1);//1升 2降 53 } 54 } 55 }else{
//无 2主 56 return compareAsc(o1sorterColumn1,o2sorterColumn1);//1 升 57 } 58 }else if(Constant.DESC.equals(sorterColumnAsc1)){
//1 主降 59 if(sorterColumnAsc2 != null){
//判断 2主 60 if(Constant.ASC.equals(sorterColumnAsc2)){
//2 主升 61 if(sorterColumnAsc3 != null){
//判断3主 62 if(Constant.ASC.equals(sorterColumnAsc3)){
//3 主升 63 return compareDesc(o1sorterColumn1,o2sorterColumn1) == 0?(compareAsc(o1sorterColumn2,o2sorterColumn2) == 0? 64 compareAsc(o1sorterColumn3,o2sorterColumn3) 65 :compareAsc(o1sorterColumn2,o2sorterColumn2)) 66 :compareDesc(o1sorterColumn1,o2sorterColumn1);//1降 2升 3升 67 }else if(Constant.DESC.equals(sorterColumnAsc3)){
//3主降 68 return compareDesc(o1sorterColumn1,o2sorterColumn1) == 0?(compareAsc(o1sorterColumn2,o2sorterColumn2) == 0? 69 compareDesc(o1sorterColumn3,o2sorterColumn3) 70 :compareAsc(o1sorterColumn2,o2sorterColumn2)) 71 :compareDesc(o1sorterColumn1,o2sorterColumn1);// 1降 2升 3降 72 } 73 }else{
//无 3主 74 return compareDesc(o1sorterColumn1,o2sorterColumn1) == 0?compareAsc(o1sorterColumn2,o2sorterColumn2) 75 :compareDesc(o1sorterColumn1,o2sorterColumn1);// 1降 2升 76 } 77 }else if(Constant.DESC.equals(sorterColumnAsc2)){
//2主降 78 if(sorterColumnAsc3 != null){
//判断3主 79 if(Constant.ASC.equals(sorterColumnAsc3)){
//3 主升 80 return compareDesc(o1sorterColumn1,o2sorterColumn1) == 0?(compareDesc(o1sorterColumn2,o2sorterColumn2) == 0? 81 compareAsc(o1sorterColumn3,o2sorterColumn3) 82 :compareDesc(o1sorterColumn2,o2sorterColumn2)) 83 :compareDesc(o1sorterColumn1,o2sorterColumn1);//1 2 降 , 3 升 84 }else if(Constant.DESC.equals(sorterColumnAsc3)){
//3主降 85 return compareDesc(o1sorterColumn1,o2sorterColumn1) == 0?(compareDesc(o1sorterColumn2,o2sorterColumn2) == 0? 86 compareDesc(o1sorterColumn3,o2sorterColumn3) 87 :compareDesc(o1sorterColumn2,o2sorterColumn2)) 88 :compareDesc(o1sorterColumn1,o2sorterColumn1);// 1 2 3 降 89 } 90 }else{
//无 3主 91 return compareDesc(o1sorterColumn1,o2sorterColumn1) == 0?compareDesc(o1sorterColumn2,o2sorterColumn2) 92 :compareDesc(o1sorterColumn1,o2sorterColumn1);// 1 2 降 93 } 94 } 95 }else{
//无 2主 96 return compareDesc(o1sorterColumn1,o2sorterColumn1);// 1降 97 } 98 } 99 }else{
//无 1 主100 return 0;101 }102 return 0;103 }104 105 /**106 * 自动寻找合适的升序序选择器107 * @param o1108 * @param o2109 * @return110 */111 public static int compareAsc(Object o1,Object o2){112 if (o1 instanceof String) { //字符串 113 return compareAsc( (String) o1, (String) o2); 114 }else if (o1 instanceof Integer) { //Integer115 return compareAsc( (Integer) o1, (Integer) o2); 116 }else if (o1 instanceof Long) { //Long117 return compareAsc( (Long) o1, (Long) o2); 118 }else { 119 System.err.println("未找到合适的比较器"); //找不到120 return 0;121 } 122 }123 /**124 * 自动寻找合适的降序序序选择器125 * @param o1126 * @param o2127 * @return128 */129 public static int compareDesc(Object o1,Object o2){130 if (o1 instanceof String) { //字符串 131 return compareDesc( (String) o1, (String) o2); 132 }else if (o1 instanceof Integer) { //Integer133 return compareDesc( (Integer) o1, (Integer) o2); 134 }else if (o1 instanceof Long) { //Integer135 return compareDesc( (Long) o1, (Long) o2); 136 }else { 137 System.err.println("未找到合适的比较器"); //找不到138 return 1;139 } 140 }141 142 /**143 * 升序比较字符串144 * @param s1145 * @param s2146 * @return147 */148 public static int compareAscs(String s1, String s2){149 int result = 0;150 if(StringUtils.isBlank(s1)){151 result = 1;152 }else if(StringUtils.isBlank(s2)){153 result = -1;154 }else{155 result = s1.compareTo(s2);156 }157 return result;158 }159 160 /**161 * 降序比较字符串162 * @param s1163 * @param s2164 * @return165 */166 public static int compareDescs(String s1, String s2){167 int result = 0;168 if(StringUtils.isBlank(s1)){169 result = 1;170 }else if(StringUtils.isBlank(s2)){171 result = -1;172 }else{173 result = s2.compareTo(s1);174 }175 return result;176 }177 178 /**179 * 升序比较数值180 * @param s1181 * @param s2182 * @return183 */184 public static int compareAsc(Integer s1, Integer s2){185 int result = 0;186 if(s1 <= 0){187 result = 1;188 }else if(s2 <= 0){189 result = -1;190 }else{191 result = s1.compareTo(s2);192 }193 return result;194 }195 196 /**197 * 降序比较数值198 * @param s1199 * @param s2200 * @return201 */202 public static int compareDesc(Long s1, Long s2){203 int result = 0;204 if(s1 <= 0){205 result = 1;206 }else if(s2 <= 0){207 result = -1;208 }else{209 result = s2.compareTo(s1);210 }211 return result;212 }213 /**214 * 升序比较数值215 * @param s1216 * @param s2217 * @return218 */219 public static int compareAsc(Long s1, Long s2){220 int result = 0;221 if(s1 <= 0){222 result = 1;223 }else if(s2 <= 0){224 result = -1;225 }else{226 result = s1.compareTo(s2);227 }228 return result;229 }230 231 /**232 * 降序比较数值233 * @param s1234 * @param s2235 * @return236 */237 public static int compareDesc(Integer s1, Integer s2){238 int result = 0;239 if(s1 <= 0){240 result = 1;241 }else if(s2 <= 0){242 result = -1;243 }else{244 result = s2.compareTo(s1);245 }246 return result;247 }248 249 /**250 * get属性251 * @param field252 * @return253 */254 public static String field2MethodName(String field){255 StringBuffer method = null;256 if(StringUtils.isNotBlank(field)){257 method = new StringBuffer();258 method.append("get");259 method.append(field.substring(0,1).toUpperCase()); 260 method.append(field.substring(1));261 return method.toString();262 }else 263 return null;264 }265 266 /**267 * 通过属性得到属性值,使用反射的方式,只要该类有set&get方法,即可通过反射获得该属性268 * @param o269 * @param field270 * @return271 */272 public static Object getFieldByReflect(Object o,String field){273 Object oo = null;274 Class
clazz = o.getClass();275 String methodName = field2MethodName(field);276 if(clazz != null && methodName != null){277 try {278 Method method = clazz.getMethod(methodName);279 oo = method.invoke(o);280 } catch (Exception e) {281 e.printStackTrace();282 } 283 }284 return oo;285 }286 287 /**288 * 升序比较汉字字符串289 * @param s1290 * @param s2291 * @return292 */293 public static int compareAsc(String s1, String s2){294 int result = 0;295 if(StringUtils.isBlank(s1)){296 result = 1;297 }else if(StringUtils.isBlank(s2)){298 result = -1;299 }else{300 result = Collator.getInstance(java.util.Locale.CHINA).compare(s1, s2);301 }302 return result;303 }304 /**305 * 降序比较汉字字符串306 * @param s1307 * @param s2308 * @return309 */310 public static int compareDesc(String s1, String s2){311 int result = 0;312 if(StringUtils.isBlank(s1)){313 result = 1;314 }else if(StringUtils.isBlank(s2)){315 result = -1;316 }else{317 result = -Collator.getInstance(java.util.Locale.CHINA).compare(s1, s2);318 }319 return result;320 }321 322 }

  6. User类

1 package com.test.order; 2  3 import java.io.Serializable; 4  5 public class User implements Serializable{ 6      7     @Override 8     public String toString() { 9         StringBuffer bf = new StringBuffer();10         bf.append("User[:");11         bf.append("userName:"+userName);12         bf.append("\nuserPassword:"+userPassword);13         bf.append("\nage:"+age+"]");14         return bf.toString();15     }16 17     private static final long serialVersionUID = 2764373816508835680L;18     private Integer id;19     private String userName;20     private String userPassword;21     private int age;22     private String email;23     private String address;24     25     26     27     public User(Integer id, String userName, String userPassword, int age,28             String email, String address) {29         super();30         this.id = id;31         this.userName = userName;32         this.userPassword = userPassword;33         this.age = age;34         this.email = email;35         this.address = address;36     }37     public User() {38         super();39         // TODO Auto-generated constructor stub40     }41     public Integer getId() {42         return id;43     }44     public void setId(Integer id) {45         this.id = id;46     }47     public String getUserName() {48         return userName;49     }50     public void setUserName(String userName) {51         this.userName = userName;52     }53     public String getUserPassword() {54         return userPassword;55     }56     public void setUserPassword(String userPassword) {57         this.userPassword = userPassword;58     }59     public int getAge() {60         return age;61     }62     public void setAge(int age) {63         this.age = age;64     }65     public String getEmail() {66         return email;67     }68     public void setEmail(String email) {69         this.email = email;70     }71     public String getAddress() {72         return address;73     }74     public void setAddress(String address) {75         this.address = address;76     }77     78     public final static String ID = "id";79     public final static String USERNAME = "userName";80     public final static String USERPASSWORD = "userPassword";81     public final static String AGE = "age";82     public final static String EMAIL= "email";83     public final static String ADDRESS = "address";84 85 }

  7. 倆作用不大的小工具

    7.1 TableHeaderButton(作用:表头图标样式)

1 package com.test.order; 2  3 import javax.swing.BorderFactory; 4  5 public class TableHeaderButton extends JButton{ 6  7     public TableHeaderButton(){ 8         setRolloverEnabled(true); 9         setRequestFocusEnabled(false);10         setBorder(BorderFactory.createRaisedBevelBorder());            11         setOpaque(true);12         setContentAreaFilled(false);13         setFocusable(false);14         setHorizontalAlignment(JLabel.CENTER); 15         setHorizontalTextPosition(SwingConstants.LEFT);16         setIconTextGap(5); 17     }18     19 }

    7.2  Constant (升降序常量:1升序,-1降序)

1 package com.test.order.orderutil;2 3 public class Constant {4     public static final String ASC = "1";5     public static final String DESC = "-1";6     7 }

 三、项目链接:

1. 本人QQ,1220817583

2. CSDN链接:http://download.csdn.net/detail/qq_31790075/9720827

转载于:https://www.cnblogs.com/shuaishuaiguo/p/6220044.html

你可能感兴趣的文章
单例模式的5种写法
查看>>
安卓问题报告小记(四):Some projects cannot be imported because they already exist in the workspace...
查看>>
显示地图
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于cocoa 运行时runtime
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
asp.net 写入excel时,不能更新。数据库或对象为只读。
查看>>
linux清空日志文件内容 (转)
查看>>
jsp中对jstl一些标签的引用方式
查看>>
mkdir命令(转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
css3学习笔记之背景
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
[dpdk] 熟悉SDK与初步使用 (二)(skeleton源码分析)
查看>>
Ajax : load()
查看>>
分布式版本控制系统
查看>>
HTTP与HTTPS的区别
查看>>