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

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

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

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    Swt/Jface tableViewer入門教程二(讓TableViewer按照列排序)

    有一個功能是我們常使用的,就是在列的頭上點擊一下,整個表的記錄按照這個列來排序,再點擊一下按照這個列的反序來排序。那JFace是如何實現這個功能的呢?
    在JFace中是通過一個排序器來實現的,就是ViewerSorter下邊寫出詳細的步驟
    一、定義一個sorter繼承自ViewerSorter
    import java.util.Date;

    import org.eclipse.jface.viewers.Viewer;
    import org.eclipse.jface.viewers.ViewerSorter;

    public class Sorter extends ViewerSorter {
            
    private static final int ID = 1;
            
    private static final int NAME = 2;
            
    private static final int SEX = 3;
            
    private static final int AGE = 4;
            
    private static final int CREATE_DATE = 5;
            
            
    public static final Sorter ID_ASC = new Sorter(ID);
            
    public static final Sorter ID_DESC = new Sorter(-ID);
            
    public static final Sorter NAME_ASC = new Sorter(NAME);
            
    public static final Sorter NAME_DESC = new Sorter(-NAME);
            
    public static final Sorter SEX_ASC = new Sorter(SEX);
            
    public static final Sorter SEX_DESC = new Sorter(-SEX);
            
    public static final Sorter AGE_ASC = new Sorter(AGE);
            
    public static final Sorter AGE_DESC = new Sorter(-AGE);
            
    public static final Sorter CREATE_DATE_ASC = new Sorter(CREATE_DATE);
            
    public static final Sorter CREATE_DATE_DESC = new Sorter(-CREATE_DATE);
            
            
    private int sortType ;
            
    private Sorter(int sortType){
                
    this.sortType = sortType;
            }

            
    public int compare(Viewer viewer, Object e1, Object e2) {
                People p1 
    = (People)e1;
                People p2 
    = (People)e2;
                
    switch(sortType){
                    
    case ID:{
                        Long l1 
    = p1.getId();
                        Long l2 
    = p2.getId();
                        
    return l1.compareTo(l2);
                    }

                    
    case -ID:{
                        Long l1 
    = p1.getId();
                        Long l2 
    = p2.getId();
                        
    return l2.compareTo(l1);
                    }

                    
    case NAME:{
                        String s1 
    = p1.getName();
                        String s2 
    = p2.getName();
                        
    return s1.compareTo(s2);
                    }

                    
    case -NAME:{
                        String s1 
    = p1.getName();
                        String s2 
    = p2.getName();
                        
    return s2.compareTo(s1);
                    }

                    
    case SEX:{
                        String s1 
    = p1.getSex();
                        String s2 
    = p2.getSex();
                        
    return s1.compareTo(s2);
                    }

                    
    case -SEX:{
                        String s1 
    = p1.getSex();
                        String s2 
    = p2.getSex();
                        
    return s2.compareTo(s1);
                    }

                    
    case AGE:{
                        Integer i1 
    = p1.getAge();
                        Integer i2 
    = p2.getAge();
                        
    return i1.compareTo(i2);
                    }

                    
    case -AGE:{
                        Integer i1 
    = p1.getAge();
                        Integer i2 
    = p2.getAge();
                        
    return i2.compareTo(i1);
                    }

                    
    case CREATE_DATE:{
                        Date d1 
    = p1.getCreateDate();
                        Date d2 
    = p2.getCreateDate();
                        d1.compareTo(d2);
                    }

                    
    case -CREATE_DATE:{
                        Date d1 
    = p1.getCreateDate();
                        Date d2 
    = p2.getCreateDate();
                        d2.compareTo(d1);
                    }

                }

                
    return 0;
            }

        }
    二、在TableViewer上,為每一列加入事件監聽器類似這樣的結構
        newColumnTableColumn.addSelectionListener(new SelectionAdapter(){
                
    boolean asc = true;
                
    public void widgetSelected(SelectionEvent e){
                    tableViewer.setSorter(asc
    ?Sorter.ID_ASC:Sorter.ID_DESC);
                    asc 
    = !asc;
                }

            }
    );
    都加入后TestTableViewer的結果:
    import org.eclipse.jface.viewers.TableViewer;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Table;
    import org.eclipse.swt.widgets.TableColumn;

    public class TestTableViewer {
        
    private static Table table;
        
    /**
         * Launch the application
         * 
    @param args
         
    */

        
    public static void main(String[] args) {
            
    final Display display = Display.getDefault();
            
    final Shell shell = new Shell();
            shell.setSize(
    500375);
            shell.setText(
    "SWT Application");
            
    //
            final TableViewer tableViewer = new TableViewer(shell, SWT.CHECK|SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
            
            table 
    = tableViewer.getTable();
            table.setLinesVisible(
    true);
            table.setHeaderVisible(
    true);
            table.setBounds(
    9779373154);

            
    final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);
            newColumnTableColumn.setWidth(
    39);
            newColumnTableColumn.setText(
    "ID");
            
    //加入事件監聽器
            newColumnTableColumn.addSelectionListener(new SelectionAdapter(){
                
    boolean asc = true;
                
    public void widgetSelected(SelectionEvent e){
                    tableViewer.setSorter(asc
    ?Sorter.ID_ASC:Sorter.ID_DESC);
                    asc 
    = !asc;
                }

            }
    );

            
    final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_1.setWidth(
    85);
            newColumnTableColumn_1.setText(
    "姓名");
    //        加入事件監聽器
            newColumnTableColumn_1.addSelectionListener(new SelectionAdapter(){
                
    boolean asc = true;
                
    public void widgetSelected(SelectionEvent e){
                    tableViewer.setSorter(asc
    ?Sorter.NAME_ASC:Sorter.NAME_DESC);
                    asc 
    = !asc;
                }

            }
    );
            
            
    final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_2.setWidth(
    41);
            newColumnTableColumn_2.setText(
    "性別");
    //        加入事件監聽器
            newColumnTableColumn_2.addSelectionListener(new SelectionAdapter(){
                
    boolean asc = true;
                
    public void widgetSelected(SelectionEvent e){
                    tableViewer.setSorter(asc
    ?Sorter.SEX_ASC:Sorter.SEX_DESC);
                    asc 
    = !asc;
                }

            }
    );
            
            
    final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_3.setWidth(
    43);
            newColumnTableColumn_3.setText(
    "年齡");
    //        加入事件監聽器
            newColumnTableColumn_3.addSelectionListener(new SelectionAdapter(){
                
    boolean asc = true;
                
    public void widgetSelected(SelectionEvent e){
                    tableViewer.setSorter(asc
    ?Sorter.AGE_ASC:Sorter.AGE_DESC);
                    asc 
    = !asc;
                }

            }
    );
            
            
    final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_4.setWidth(
    126);
            newColumnTableColumn_4.setText(
    "創建日期");
    //        加入事件監聽器
            newColumnTableColumn_4.addSelectionListener(new SelectionAdapter(){
                
    boolean asc = true;
                
    public void widgetSelected(SelectionEvent e){
                    tableViewer.setSorter(asc
    ?Sorter.CREATE_DATE_ASC:Sorter.CREATE_DATE_DESC);
                    asc 
    = !asc;
                }

            }
    );
            
            tableViewer.setContentProvider(
    new ContentProvider());
            tableViewer.setLabelProvider(
    new TableLabelProvider());
            tableViewer.setInput(People.getPeople());
            
            shell.open();
            shell.setLayout(
    new FillLayout());
            shell.layout();
            
    while (!shell.isDisposed()) {
                
    if (!display.readAndDispatch())
                    display.sleep();
            }

        }

    }

    試一下結果是不是出來了?
    好了,最后解釋幾點:
    1,sorter中利用了jdk的compareTo來實現比較,當然你也可以根據自己的需求來實現。
    2,  sorter中利用了"-"符號來得到正負數字,用來表現升序、降序。
    source下載:http://www.tkk7.com/Files/dreamstone/jface-2.rar

    posted on 2007-08-05 13:05 dreamstone 閱讀(5864) 評論(1)  編輯  收藏 所屬分類: SWT和插件開發

    評論

    # re: Swt/Jface tableViewer入門教程二(讓TableViewer按照列排序) 2012-05-02 11:39 LFZ

    謝謝!很受用  回復  更多評論   

    主站蜘蛛池模板: 国产免费黄色无码视频 | 一级做a免费视频观看网站| 亚洲中文字幕无码爆乳av中文| 免费看无码特级毛片| 亚洲人成在线播放| 免费国产a国产片高清网站| 成人av片无码免费天天看| 亚洲国产成人超福利久久精品| 四虎免费永久在线播放| 久久国产精品免费视频| jizzjizz亚洲日本少妇| 老色鬼久久亚洲AV综合| 又粗又硬又黄又爽的免费视频| 日韩免费无码一区二区三区| 亚洲AV无码资源在线观看| 亚洲a在线视频视频| 免费国产真实迷j在线观看| **真实毛片免费观看 | 久章草在线精品视频免费观看| 国产亚洲精品成人AA片| 亚洲第一AAAAA片| 亚洲欧洲第一a在线观看| 日韩电影免费在线| 88xx成人永久免费观看| 免费精品国产自产拍在线观看| 亚洲第一永久在线观看| 国产成人精品日本亚洲专区| 噼里啪啦电影在线观看免费高清 | 国产免费卡一卡三卡乱码| 99久久久国产精品免费蜜臀 | 中文字幕av无码无卡免费| 国产无限免费观看黄网站| 亚洲精品天堂成人片AV在线播放| 亚洲成在人天堂一区二区| 亚洲国产精品尤物YW在线观看| 日本精品人妻无码免费大全| 精品国产免费一区二区三区香蕉| 黄色a三级免费看| 亚洲AV无码专区亚洲AV桃| 亚洲va在线va天堂成人| 亚洲精品在线网站|