超越自我

          一切皆有可能

           

          創建TableViewer

          checkbox.JPG
          1.tableviewer初始化
          TableViewer viewer = new TableViewer(chooseModuleGroup,SWT.FULL_SELECTION|SWT.BORDER);
             Table table=viewer.getTable();
             GridData griddata = new GridData(GridData.FILL_BOTH);
             griddata.horizontalSpan = 2;
             griddata.verticalSpan = 2;
             griddata.heightHint=100;
             table.setLayoutData(griddata);
             TableLayout layout = new TableLayout();
             layout.addColumnData(new ColumnWeightData(120, true));
             layout.addColumnData(new ColumnWeightData(120, true));
             TableColumn column1 = new TableColumn(table,SWT.CENTER);
             column1.setText("choose");
             TableColumn column2 = new TableColumn(table,SWT.CENTER);
             column2.setText("module");
             viewer.setColumnProperties(new String[]{"choose","module"});
             table.setLayout(layout);
             table.setLinesVisible(true);
             table.setHeaderVisible(true);
             viewer.setCellEditors(new CellEditor[] {new CheckboxCellEditor(table) ,new TextCellEditor(table)});
             viewer.setLabelProvider(new CheckBoxLabelProvider());
             viewer.setContentProvider(new CheckBoxContentProvider());
             viewer.setCellModifier(new ModuleSelectionModifier());
             viewer.setInput(selectionList);
             selectionList.collectSelectedModules();
          2.創建ICellModifier
          class ModuleSelectionModifier implements ICellModifier{

             public boolean canModify(Object element, String property) {
              if(property.equals("choose")){
               return true;
              }
              return false;
             }

             public Object getValue(Object element, String property) {
              Object result=null;
              MichelleSelectedModule module=(MichelleSelectedModule)element;
              if(property.equals("choose")){
               return new Boolean(module.getSelected());
              }else if(property.equals("module")){
               return module.getPlugin();
                 }else{
                   return result;
                 }
             }

             public void modify(Object element, String property, Object value) {
              MichelleSelectedModule module=(MichelleSelectedModule)((TableItem) element).getData();
              if(property.equals("choose")){
               module.setSelected(((Boolean)value).booleanValue());
              }
              selectionList.moduleChanged(module);
             }
            }
           }
          3.創建modellist 為tableviewer提供添加 刪除 更新等model的方法
          private ModuleSelectionList selectionList=new ModuleSelectionList();
           class CheckBoxContentProvider implements IStructuredContentProvider,IModuleListViewer{
            public Object[] getElements(Object inputElement) {
             return selectionList.getElements();
            }

            public void dispose() {
             selectionList.removeChangeListener(this);
            }

            public void addModule(MichelleSelectedModule module) {
             viewer.add(module);
            }

            public void removeModule(MichelleSelectedModule module) {
             viewer.remove(module);
            }
            
            public void updateModule(MichelleSelectedModule module) {
             viewer.update(module, null); 
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
             if (newInput != null)
              ((ModuleSelectionList) newInput).addChangeListener(this);
             if (oldInput != null)
              ((ModuleSelectionList) oldInput).removeChangeListener(this);
            }
           }
          4.創建LabelProvider  (這個LabelProvider 在第一列提供checkbox選項)
          class CheckBoxLabelProvider extends LabelProvider implements ITableLabelProvider{
            private Image getImageByBoolean(boolean selected) {
                return selected?checkImage.createImage():unCheckImage.createImage();
            }
            public Image getColumnImage(Object element, int columnIndex) {
             return (columnIndex == 0) ?   // COMPLETED_COLUMN?
               getImageByBoolean(((MichelleSelectedModule) element).getSelected()) :
               null;
            }

            public String getColumnText(Object element, int columnIndex) {
             String result = "";
             if(element==null)return result;
             MichelleSelectedModule module=(MichelleSelectedModule)element;
             switch (columnIndex) {
              case 0:  // COMPLETED_COLUMN
               break;
              case 1 :
               result =module.getPlugin();
               break;
              default :
               break;  
             }
             return result;
            }
            
           }

          posted on 2005-11-02 13:16 jame 閱讀(1378) 評論(2)  編輯  收藏 所屬分類: SWT/JFace/Draw2d/Swing技術

          評論

          # re: 創建TableViewer 2006-06-26 15:21 江山

          MichelleSelectedModule
          這個類的代碼沒有么?能不能把代碼給全呢?  回復  更多評論   

          # re: 創建TableViewer 2006-06-28 09:02 jame

          這個類其實只是一個模型,提示一下我是采用selected (boolean)屬性判斷是否選擇(CheckBox)

          那個類是以前DEMO中截取的代碼片斷,抱歉目前不能給出這個類.

          但是基本的原理我可以寫出來.

          class MichelleSelectedModule{
          ...
          private boolean selected=false
          public void setSelected(boolean selected){
          this.selected=selected;
          }
          public boolean isSelected(){
          return selected;
          }
          ...
          }
          模型是CheckBoxContentProvider 接口提供的
          模型UI修改是通過ModuleSelectionModifier來實現的
          UI展示是通過LabelProvider 來實現的.
          其實很簡單JFace標準結構,符合MVC這樣的結構  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          UML

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 竹北市| 达拉特旗| 鹤壁市| 互助| 女性| 黑水县| 建宁县| 丘北县| 溧水县| 崇信县| 海城市| 邵武市| 溆浦县| 东兰县| 察雅县| 永济市| 屯门区| 天祝| 双桥区| 红安县| 沁阳市| 通州市| 和林格尔县| 金塔县| 诸城市| 寿阳县| 泽州县| 仲巴县| 南昌市| 嘉义县| 会昌县| 屏东县| 京山县| 都兰县| 瑞昌市| 淄博市| 韶关市| 垫江县| 宜良县| 紫阳县| 澜沧|