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

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

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

    春風博客

    春天里,百花香...

    導航

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

    統計

    公告

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

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    利用MouseAdapter來實現自排序的表格

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


    首先請增加這樣三個類:
    SortTableMouseAdaptor類:用以排序的關鍵類。
    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類的內部類使用:
    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類的內部類使用:
    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];
        }

    }


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

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

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

    評論

    # re: 利用MouseAdapter來實現自排序的表格 2007-07-09 17:00 交口稱贊

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


    java6生成排序表格,推薦看下,算是打個廣告
      回復  更多評論   

    # re: 利用MouseAdapter來實現自排序的表格 2007-07-10 09:15 sitinspring

    Jdk6的排序表格是不錯,就是適用性窄一點,很多人還在1.4下,這時就得自己動手了.  回復  更多評論   

    sitinspring(http://www.tkk7.com)原創,轉載請注明出處.
    主站蜘蛛池模板: 亚洲最大福利视频网站| 亚洲人成网77777色在线播放| 久久精品亚洲综合专区| 拍拍拍无挡视频免费观看1000| 337p日本欧洲亚洲大胆色噜噜| a毛片免费观看完整| 亚洲人成网77777色在线播放| 国产无限免费观看黄网站| 亚洲人成网站在线播放vr| 日韩电影免费在线观看| 亚洲精品无码久久久久去q | 四虎永久精品免费观看| 国产成人精品亚洲| 四虎精品亚洲一区二区三区| 一级做a毛片免费视频| 国产亚洲精品无码成人| 四虎成人精品永久免费AV| 91嫩草亚洲精品| 日本人护士免费xxxx视频| 四虎影视永久在线精品免费| 亚洲精品午夜无码专区| 1000部啪啪毛片免费看| 亚洲熟妇无码八V在线播放| 亚洲成av人片不卡无码久久| 久久精品成人免费观看| 亚洲娇小性xxxx色| mm1313亚洲国产精品美女| 久久免费福利视频| 亚洲精品无码少妇30P| 青青草原亚洲视频| 免费可以看黄的视频s色| 色多多免费视频观看区一区| 国产∨亚洲V天堂无码久久久| 免费看黄视频网站| 一级中文字幕乱码免费| 亚洲精品美女在线观看播放| 日韩成人免费在线| 桃子视频在线观看高清免费视频| 亚洲色大成WWW亚洲女子| 伊人久久综在合线亚洲91| 在线视频精品免费|