超越自我

          一切皆有可能

           

          創(chuàng)建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.創(chuàng)建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.創(chuàng)建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.創(chuàng)建LabelProvider  (這個(gè)LabelProvider 在第一列提供checkbox選項(xiàng))
          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技術(shù)

          評論

          # re: 創(chuàng)建TableViewer 2006-06-26 15:21 江山

          MichelleSelectedModule
          這個(gè)類的代碼沒有么?能不能把代碼給全呢?  回復(fù)  更多評論   

          # re: 創(chuàng)建TableViewer 2006-06-28 09:02 jame

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

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

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

          class MichelleSelectedModule{
          ...
          private boolean selected=false
          public void setSelected(boolean selected){
          this.selected=selected;
          }
          public boolean isSelected(){
          return selected;
          }
          ...
          }
          模型是CheckBoxContentProvider 接口提供的
          模型UI修改是通過ModuleSelectionModifier來實(shí)現(xiàn)的
          UI展示是通過LabelProvider 來實(shí)現(xiàn)的.
          其實(shí)很簡單JFace標(biāo)準(zhǔn)結(jié)構(gòu),符合MVC這樣的結(jié)構(gòu)  回復(fù)  更多評論   


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          UML

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大兴区| 鹿泉市| 利川市| 灵寿县| 濮阳市| 辽阳县| 佛山市| 抚顺县| 柳江县| 儋州市| 城固县| 丹凤县| 宁南县| 墨脱县| 宜君县| 汝南县| 黄石市| 青州市| 新巴尔虎右旗| 新丰县| 始兴县| 凉城县| 江川县| 江口县| 灯塔市| 江北区| 壶关县| 香格里拉县| 公安县| 鄂温| 广饶县| 法库县| 东莞市| 秀山| 蒙阴县| 贺州市| 奇台县| 嘉峪关市| 二连浩特市| 乐业县| 衡南县|