隨筆 - 4  文章 - 10  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          1,簡單顯示,表格的式樣見注釋中的內容
          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(
          "創建日期");
                  
                  shell.open();
                  
          while (!shell.isDisposed()) {
                      
          if (!display.readAndDispatch())
                          display.sleep();
                  }

              }

          }
          2,加入布局
          顯示的效果不好,我們要加入布局,讓view填充整個畫面在shell.open()后加上
          ok,效果達到
          3,為TableViewer加上數據,光突突的樣子不好看。這里是demo所以不再從數據庫里邊取數據了。自己構造一個List用來做數據。實際使用中也是這么使用,不過不同的是這里是隨意構造的list,而顯示實際使用中是從數據庫取出數據構造list.
          (1)構造一個people類,同時給People類提供一個構造假數據的方法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提供內容器(IStructuredContentPorvider)和標簽器(ITableLabelProvider)
          如果想一個tableviewer顯示數據,那必須給它提供內容器和標簽器,內容器的作用是從List(也可以是其他的集合類)中提取出一個對象(例如People對應著表格的一行,數據庫的一條記錄),標簽器的作用是從一個對象中提取出一個字段(例如年齡,對應著表格中的一個單元格,數據庫中某一列的一個值)下邊是內容器和標簽器的代碼:
          內容器:
          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,為什么要加這個呢? 因為如果不加這個,因為實現 ITableLabelProvider 的緣故我們還要寫四個空函數,而我們本身不需要在這四個空函數中實現什么,所以讓它繼承自LabelProvider,就可以避免四個空函數。
          (3)把標簽器和內容器給tableviewer
          在shell.open()前邊加上這幾行

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

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

          好了到此一個簡單的樣子選擇出來了,但這僅僅是開始,下邊將繼續介紹按列排序、過濾器、行的顏色設置、在表格上直接編輯等功能

          posted on 2007-08-13 13:28 冬天出走的豬 閱讀(647) 評論(0)  編輯  收藏 所屬分類: j2se
          主站蜘蛛池模板: 黄山市| 乌鲁木齐市| 苏尼特左旗| 昭苏县| 澎湖县| 广丰县| 泸水县| 鄢陵县| 达孜县| 界首市| 济南市| 乐安县| 津市市| 阳西县| 水城县| 洛宁县| 昌邑市| 即墨市| 怀远县| 彰化县| 永善县| 镇安县| 瑞昌市| 饶阳县| 武隆县| 黄浦区| 纳雍县| 海门市| 改则县| 石楼县| 绥阳县| 阳原县| 东阳市| 永昌县| 鄂州市| 金阳县| 黑水县| 额敏县| 井陉县| 武强县| 若羌县|