<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 閱讀(1658) 評(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∨在线观看| 亚洲春黄在线观看| 亚洲国产成人手机在线电影bd| 亚洲网站在线播放| 国产精品亚洲自在线播放页码 | 亚洲精品高清在线| 国产日韩成人亚洲丁香婷婷| 成人午夜亚洲精品无码网站| 国产aⅴ无码专区亚洲av| 99ri精品国产亚洲| 亚洲欧洲日本在线观看| 亚洲精品日韩一区二区小说| 美女被爆羞羞网站在免费观看| 人人爽人人爽人人片av免费| 免费毛片在线看不用播放器| 99精品视频在线免费观看| 久草视频免费在线| 在线视频免费国产成人| 亚洲五月午夜免费在线视频| 亚洲成AV人片在| 亚洲日本国产精华液| 亚洲欧美日韩中文字幕在线一区| 特级av毛片免费观看| 日韩精品无码免费专区午夜| 日本黄网站动漫视频免费| 日本黄色免费观看| 亚洲欧洲国产精品香蕉网| 亚洲毛片一级带毛片基地| 亚洲乱色伦图片区小说| 成年免费a级毛片免费看无码| 57pao国产成永久免费视频| 女人被免费视频网站| 国产亚洲精品无码专区| 亚洲激情校园春色|