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

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

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

    DANCE WITH JAVA

    開發(fā)出高質(zhì)量的系統(tǒng)

    常用鏈接

    統(tǒng)計

    積分與排名

    好友之家

    最新評論

    Swt/Jface tableViewer入門教程一(顯示tableViewer)

    1,簡單顯示,表格的式樣見注釋中的內(nèi)容
    import org.eclipse.jface.viewers.TableViewer;
    import org.eclipse.swt.SWT;
    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");
            
    //注意這里,SWT.NULTI代表可以選擇多行,SWT.FULL_SELECTION代表可以整行選擇,SWT.BORDER邊框,SWT.V_SCROLL ,SWT.H_SCROLL滾動條
            final TableViewer tableViewer = new TableViewer(shell, 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");

            
    final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_1.setWidth(
    85);
            newColumnTableColumn_1.setText(
    "姓名");
            
            
    final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_2.setWidth(
    41);
            newColumnTableColumn_2.setText(
    "性別");

            
    final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_3.setWidth(
    43);
            newColumnTableColumn_3.setText(
    "年齡");

            
    final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
            newColumnTableColumn_4.setWidth(
    126);
            newColumnTableColumn_4.setText(
    "創(chuàng)建日期");
            
            shell.open();
            
    while (!shell.isDisposed()) {
                
    if (!display.readAndDispatch())
                    display.sleep();
            }

        }

    }
    2,加入布局
    顯示的效果不好,我們要加入布局,讓view填充整個畫面在shell.open()后加上
    ok,效果達到
    3,為TableViewer加上數(shù)據(jù),光突突的樣子不好看。這里是demo所以不再從數(shù)據(jù)庫里邊取數(shù)據(jù)了。自己構造一個List用來做數(shù)據(jù)。實際使用中也是這么使用,不過不同的是這里是隨意構造的list,而顯示實際使用中是從數(shù)據(jù)庫取出數(shù)據(jù)構造list.
    (1)構造一個people類,同時給People類提供一個構造假數(shù)據(jù)的方法getPeople()
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    public class People{
        
    private Long id;
        
    private String name;
        
    private String sex;
        
    private Integer age;
        
    private Date createDate;
        
    public People(Long id,String name,String sex,Integer age,Date createDate){
            
    this.id = id;
            
    this.name = name;
            
    this.sex = sex;
            
    this.age = age;
            
    this.createDate = createDate;
        }

        
    public Integer getAge() {
            
    return age;
        }

        
    public void setAge(Integer age) {
            
    this.age = age;
        }

        
    public Date getCreateDate() {
            
    return createDate;
        }

        
    public void setCreateDate(Date createDate) {
            
    this.createDate = createDate;
        }

        
    public Long getId() {
            
    return id;
        }

        
    public void setId(Long id) {
            
    this.id = id;
        }

        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public String getSex() {
            
    return sex;
        }

        
    public void setSex(String sex) {
            
    this.sex = sex;
        }

        
    public static List getPeople(){
            List list 
    = new ArrayList();
            
    int n = 30;
            
    for(int i=1;i<n;i++){
                Long id 
    = new Long(i);
                String name 
    = ""+i;
                String sex 
    = "";
                
    if((i%2== 0){
                    sex 
    = "";
                }

                Integer age;
                
    if(i<10){
                    age 
    = new Integer(i*10);
                }
    else if(i>10 && i<100){
                    age 
    = new Integer(i);
                }
    else if(i>100 && i<1000){
                    age 
    = new Integer(i/10);
                }
    else{
                    age 
    = new Integer(22);
                }

                Date createDate 
    = new Date();
                People people 
    = new People(id,name,sex,age,createDate);
                list.add(people);
            }

            
    return list;
        }

    }

    (2)給tableViewer提供內(nèi)容器(IStructuredContentPorvider)和標簽器(ITableLabelProvider)
    如果想一個tableviewer顯示數(shù)據(jù),那必須給它提供內(nèi)容器和標簽器,內(nèi)容器的作用是從List(也可以是其他的集合類)中提取出一個對象(例如People對應著表格的一行,數(shù)據(jù)庫的一條記錄),標簽器的作用是從一個對象中提取出一個字段(例如年齡,對應著表格中的一個單元格,數(shù)據(jù)庫中某一列的一個值)下邊是內(nèi)容器和標簽器的代碼:
    內(nèi)容器:
    import java.util.List;

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

    public class ContentProvider implements IStructuredContentProvider {
            
    public Object[] getElements(Object inputElement) {
                
    if(inputElement instanceof List){
                    
    return ((List)inputElement).toArray();
                }
    else{
                    
    return new Object[0];
                }

            }

            
    public void dispose() {
            }

            
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

        }
    標簽器:
    import java.text.SimpleDateFormat;

    import org.eclipse.jface.viewers.ITableLabelProvider;
    import org.eclipse.jface.viewers.LabelProvider;
    import org.eclipse.swt.graphics.Image;

    public class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
            
    public String getColumnText(Object element, int columnIndex) {
                
    if (element instanceof People){
                    People p 
    = (People)element;
                    
    if(columnIndex == 0){
                        
    return p.getId().toString();
                    }
    else if(columnIndex == 1){
                        
    return p.getName();
                    }
    else if (columnIndex ==2){
                        
    return p.getSex();
                    }
    else if (columnIndex == 3){
                        
    return p.getAge().toString();
                    }
    else if (columnIndex == 4){
                        SimpleDateFormat sdf 
    = new SimpleDateFormat("yyyy-MM-dd");
                        
    return sdf.format(p.getCreateDate());
                    }

                }

                
    return null;
            }

            
    public Image getColumnImage(Object element, int columnIndex) {
                
    return null;
            }

        }

    注意這里:extends LabelProvider,為什么要加這個呢? 因為如果不加這個,因為實現(xiàn) ITableLabelProvider 的緣故我們還要寫四個空函數(shù),而我們本身不需要在這四個空函數(shù)中實現(xiàn)什么,所以讓它繼承自LabelProvider,就可以避免四個空函數(shù)。
    (3)把標簽器和內(nèi)容器給tableviewer
    在shell.open()前邊加上這幾行

    //設置內(nèi)容器
    tableViewer.setContentProvider(new ContentProvider());
    //設置標簽器
    tableViewer.setLabelProvider(new TableLabelProvider());
    //把數(shù)據(jù)集合給tableView
    tableViewer.setInput(People.getPeople());
    //這樣利用內(nèi)容器和標簽器就能從setInput得到的數(shù)據(jù)集合分解出顯示表格需要的數(shù)據(jù)。這是一個典型的mvc的實現(xiàn).

    4,樣式改變
    如果想在每一列前加入一個checkbox
    只需要在開始的式樣中加入SWT.CHECK

    好了到此一個簡單的樣子選擇出來了,但這僅僅是開始,下邊將繼續(xù)介紹按列排序、過濾器、行的顏色設置、在表格上直接編輯等功能
     附上source:http://www.tkk7.com/Files/dreamstone/jface-1.rar

    posted on 2007-08-05 12:48 dreamstone 閱讀(20315) 評論(8)  編輯  收藏 所屬分類: SWT和插件開發(fā)

    評論

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer)[未登錄] 2007-08-16 08:08 allen

    要是有圖就更完美了~~  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer) 2007-08-17 12:34 dreamstone

    blog上貼圖比較麻煩。不過我提供了source,直接下載,用eclipse打開,運行,圖就有了。  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer) 2007-11-12 10:28 lordtan

    非常不錯  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer) 2008-04-29 16:38 小竹

    ibm上面有比較詳細的

    但是沒你說的通俗...

    受教了...  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer) 2009-12-31 17:10 jock

    "因為如果不加這個,因為實現(xiàn) ITableLabelProvider 的緣故我們還要寫四個空函數(shù),而我們本身不需要在這四個空函數(shù)中實現(xiàn)什么,所以讓它繼承自LabelProvider,就可以避免四個空函數(shù)。"
    呵呵 這樣寫不好 并不能為了避免四個空函數(shù) 而去繼承  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer) 2012-05-02 11:02 LFZ

    謝謝!  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer)[未登錄] 2013-07-11 09:31 匿名

    感謝樓主  回復  更多評論   

    # re: Swt/Jface tableViewer入門教程一(顯示tableViewer) 2015-01-22 10:49 suren

    樓主講解的很清楚,學習了。
    http://surenpi.com  回復  更多評論   

    主站蜘蛛池模板: 国产亚洲色婷婷久久99精品| a级毛片高清免费视频| 亚洲视频在线免费观看| 国产99视频免费精品是看6| 久久午夜夜伦鲁鲁片免费无码影视| 污视频网站在线观看免费| 日韩亚洲不卡在线视频中文字幕在线观看| 国产精品亚洲аv无码播放| 免费在线观看日韩| 无码中文字幕av免费放| 97精品免费视频| 国产精品白浆在线观看免费| 一区二区在线视频免费观看| 国产亚洲情侣久久精品| 亚洲欧洲无码AV不卡在线| 亚洲乱码一二三四五六区| 亚洲欧洲免费视频| 亚洲成AV人片在线观看无码| 亚洲啪啪综合AV一区| 在线a亚洲v天堂网2019无码| 亚洲国产精品成人| 亚洲va中文字幕无码| 吃奶摸下高潮60分钟免费视频| 四色在线精品免费观看| 成人午夜18免费看| 欧亚精品一区三区免费| 一个人看www在线高清免费看 | 午夜一级毛片免费视频| 亚洲免费网站观看视频| 永久免费av无码不卡在线观看| 我的小后妈韩剧在线看免费高清版| 1000部拍拍拍18勿入免费凤凰福利| 精品无码AV无码免费专区| 亚洲免费闲人蜜桃| 久草视频免费在线| 无码日韩精品一区二区免费| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 精品国产亚洲一区二区在线观看 | 国产免费区在线观看十分钟| xxxxx做受大片在线观看免费| 国产精品免费一区二区三区 |