<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風(fēng)博客

    春天里,百花香...

    導(dǎo)航

    <2007年7月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統(tǒng)計(jì)

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個(gè)人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    利用MouseAdapter來實(shí)現(xiàn)自排序的表格

    本文參考了http://www.java2s.com/Code/Java/Swing-JFC/TableSortTest.htm的做法。主要處理是取得用戶點(diǎn)擊的列,得到按此列排序的新數(shù)組,刪除原有元素,再把新數(shù)組加入進(jìn)表格;如果已經(jīng)排序,則進(jìn)行逆序處理。處理完畢后,用戶點(diǎn)擊表頭即可實(shí)現(xiàn)排序和逆序。


    首先請(qǐng)?jiān)黾舆@樣三個(gè)類:
    SortTableMouseAdaptor類:用以排序的關(guān)鍵類。
    public class SortTableMouseAdaptor extends MouseAdapter{
        
    private JTable table;
        
        
    public SortTableMouseAdaptor(JTable table){
            
    this.table=table;
        }

        
        
    public void mouseClicked(MouseEvent event) // check for double
            /*
             * if (event.getClickCount() < 2) return;
             
    */


            
    // find column of click and
            int tableColumn = table.columnAtPoint(event.getPoint());

            
    // translate to table model index and sort
            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

            
    int rowCount = tableModel.getRowCount();
            
    int cloumnCount = tableModel.getColumnCount();

            SortTableRow[] tableRowArr 
    = new SortTableRow[rowCount];

            
    int j;
            
    for (int i = 0; i < rowCount; i++{
                tableRowArr[i] 
    = new SortTableRow(cloumnCount, tableColumn);
                
                
    for (j = 0; j < cloumnCount; j++{
                    tableRowArr[i].setArrValue(j, tableModel.getValueAt(i,j));
                }

            }

            
            SortCompareColum compareColum
    =new SortCompareColum(rowCount);
            
    for (int i = 0; i < rowCount; i++{
                compareColum.setArrValue(i, tableModel.getValueAt(i,tableColumn));
            }

            
            tableModel.setRowCount(
    0);
            Arrays.sort(tableRowArr);
            
            
    if(compareColum.isSorted()){
                List ls
    =Arrays.asList(tableRowArr);
                Collections.reverse(ls);
                
                
    for (int i = 0; i < ls.size(); i++{
                    SortTableRow tableRow
    =(SortTableRow)ls.get(i);
                    
                    tableModel.addRow(tableRow.getArr());
                }

            }

            
    else{                
                
    for (int i = 0; i < tableRowArr.length; i++{
                    tableModel.addRow(tableRowArr[i].getArr());
                }

            }


            
            table.invalidate();
        }

    }

    SortCompareColum類,可以作為SortTableMouseAdaptor類的內(nèi)部類使用:
    public class SortCompareColum{
        
    private Object[] arr;
        
        
    public SortCompareColum(int arrLength){
            arr 
    = new Object[arrLength];
        }

        
        
    public void setArrValue(int i, Object value) {
            arr[i] 
    = value;
        }

        
        
    public boolean isSorted(){
            
    boolean retval=true;
            
            
    for(int i=0;i<arr.length-1;i++){
                
                
    try{
                    
    int op1 =Integer.valueOf((String) arr[i]);
                    
    int op2 = Integer.valueOf((String) arr[i+1]);
                    
                    retval
    =retval && (op1-op2>0?false:true);
                }

                
    catch(Exception e){
                    String op1 
    = (String) arr[i];
                    String op2 
    = (String) arr[i+1];
                    
                    retval
    =retval && (op1.compareTo(op2)>0?false:true);
                }

            }

            
            
    return retval;
        }

    }


    SortTableRow類,可以作為SortTableMouseAdaptor類的內(nèi)部類使用:
    public class SortTableRow implements Comparable {
        
    private Object[] arr;

        
    public int compareColumnIndex;

        
    public SortTableRow(int arrLength, int compareColumnIndex) {
            arr 
    = new Object[arrLength];
            ;
            
    this.compareColumnIndex = compareColumnIndex;
        }


        
    public void setArrValue(int i, Object value) {
            arr[i] 
    = value;
        }


        
    public int compareTo(Object other) {
            SortTableRow another 
    = (SortTableRow) other;

            
    try{            
                String op1 
    = (String) this.getCompareObj();
                String op2 
    = (String) another.getCompareObj();
                
    int op3=Integer.valueOf(op1);
                
    int op4=Integer.valueOf(op2);
                
                
    return op3-op4;
            }

            
    catch(Exception ex){
                String op1 
    = (String) this.getCompareObj();
                String op2 
    = (String) another.getCompareObj();
                
    return op1.compareTo(op2);
            }
            
        }

        
        
    public Object[] getArr() {
            
    return arr;
        }


        
    public Object getCompareObj() {
            
    return arr[compareColumnIndex];
        }

    }


    使用時(shí)對(duì)需要排序的表格進(jìn)行如下處理就行了,很簡(jiǎn)單方便:
    table.getTableHeader().addMouseListener(new SortTableMouseAdaptor(table));

    三個(gè)類打包下載在此,歡迎試用:
    http://www.tkk7.com/Files/sitinspring/sortTable20070712105832.rar

    posted on 2007-07-09 15:58 sitinspring 閱讀(1659) 評(píng)論(2)  編輯  收藏 所屬分類: Swing

    評(píng)論

    # re: 利用MouseAdapter來實(shí)現(xiàn)自排序的表格 2007-07-09 17:00 交口稱贊

    學(xué)習(xí)Java6(九)Table(1)排序表格
    http://www.tkk7.com/vip01/archive/2007/05/14/117244.html


    java6生成排序表格,推薦看下,算是打個(gè)廣告
      回復(fù)  更多評(píng)論   

    # re: 利用MouseAdapter來實(shí)現(xiàn)自排序的表格 2007-07-10 09:15 sitinspring

    Jdk6的排序表格是不錯(cuò),就是適用性窄一點(diǎn),很多人還在1.4下,這時(shí)就得自己動(dòng)手了.  回復(fù)  更多評(píng)論   

    sitinspring(http://www.tkk7.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
    主站蜘蛛池模板: 亚洲中文字幕久久精品无码A| 亚洲精品乱码久久久久久蜜桃不卡| 又黄又爽又成人免费视频| 8x8×在线永久免费视频| 精品一区二区三区无码免费视频 | 亚洲AV无码久久精品蜜桃| 夜夜春亚洲嫩草影院| 亚洲无人区一区二区三区| 亚洲乱码日产一区三区| 亚洲国产精品无码AAA片| 亚洲AV午夜福利精品一区二区| 亚洲VA中文字幕无码一二三区| 亚洲精品免费在线观看| 亚洲午夜未满十八勿入| 亚洲欧洲中文日产| 自拍日韩亚洲一区在线| 亚洲AV噜噜一区二区三区| 免费观看亚洲人成网站| 国产高潮流白浆喷水免费A片 | 中文字幕免费视频精品一| 久久免费公开视频| av无码免费一区二区三区| 女人被男人桶得好爽免费视频| 国产免费av片在线播放| 久久亚洲AV永久无码精品| 久久亚洲国产成人亚| 久久精品国产亚洲AV蜜臀色欲| 亚洲爆乳AAA无码专区| 亚洲免费日韩无码系列| 无码人妻丰满熟妇区免费| 国产片AV片永久免费观看| 日韩免费视频一区| 久久精品国产亚洲精品| 亚洲蜜芽在线精品一区| 亚洲欧美日韩综合久久久久| 性生大片视频免费观看一级| 久久精品免费观看| 女人与禽交视频免费看| 亚洲毛片不卡av在线播放一区| 亚洲视频在线免费观看| 亚洲欧美一区二区三区日产|