9910

          單飛

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          前邊實現了一個表格的基本功能,但這并不夠好,能否為表格實現一些更好的功能呢?答案是肯定的。下邊我們來加入直接編輯的功能。
          一、要實現這個功能必須提供一個實現ICellModifier的類。內容如下

          import org.eclipse.jface.viewers.ICellModifier;
          import org.eclipse.jface.viewers.TableViewer;
          import org.eclipse.swt.widgets.TableItem;

          public class MyCellModifier implements ICellModifier{
                  
          private TableViewer tv;
                  
          public static String[] NAMES ={"張三","李四","小紅","翠花"};
                  
                  
          public MyCellModifier(TableViewer tv){
                          
          this.tv = tv;
                  }

                  
          public boolean canModify(Object element, String property) {
                      
          return true;
                  }


                  
          public Object getValue(Object element, String property) {
                      People p 
          = (People)element;
                      
          if(property.equals("name")){
                          
          return new Integer(getNameIndex(p.getName()));
                      }
          else if(property.equals("sex")){
                          
          return new Boolean(p.getSex().equals(""));
                      }
          else if(property.equals("age")){
                          
          return String.valueOf(p.getAge());
                      }

                      
          throw new RuntimeException("error column name : " + property);
                  }

                  
          private int getNameIndex(String name){
                      
          for(int i=0;i<NAMES.length;i++){
                          
          if(NAMES[i].equals(name)){
                              
          return i;
                          }

                      }

                      
          return -1;
                  }


                  
          public void modify(Object element, String property, Object value) {
                      TableItem item 
          = (TableItem)element;
                      People p 
          = (People)item.getData();
                      
          if (property.equals("name")){
                          Integer comboIndex 
          = (Integer)value;
                          
          if(comboIndex.intValue() == -1){
                              
          return ;
                          }

                          String newName 
          = NAMES[comboIndex.intValue()];
                          p.setName(newName);
                      }
          else if(property.equals("sex")){
                          Boolean newValue 
          = (Boolean)value;
                          System.out.println(newValue);
                          
          if(newValue.booleanValue()){
                              p.setSex(
          "");
                          }
          else{
                              p.setSex(
          "");
                          }

                      }
          else if (property.equals("age")){
                          String newValue 
          = (String)value;
                          
          if(newValue.equals("")){
                              
          return ;
                          }

                          Integer newAge 
          = new Integer(newValue);
                          p.setAge(newAge);
                      }
          else{
                          
          throw new RuntimeException("錯誤列名:" + property);
                      }

                      tv.update(p, 
          null);
                  }

                  
              }

          二、好了,有了這個類,下一部就是如何把它和TestTableViewer關聯起來,在TestTableViewer中setInput()后加入如下內容
          tableViewer.setColumnProperties(new String[]{"id","name","sex","age","createDate"});
                  CellEditor[] cellEditor 
          = new CellEditor[5];
                  cellEditor[
          0= null;
                  cellEditor[
          1= new ComboBoxCellEditor(tableViewer.getTable(),MyCellModifier.NAMES,SWT.READ_ONLY);
                  cellEditor[
          2= new CheckboxCellEditor(tableViewer.getTable());
                  cellEditor[
          3= new TextCellEditor(tableViewer.getTable());
                  cellEditor[
          4= null;
                  tableViewer.setCellEditors(cellEditor);
                  ICellModifier modifier 
          = new MyCellModifier(tableViewer);
                  tableViewer.setCellModifier(modifier);
          我們讓名字這一列用下拉條來編輯,讓性別這一列變成類似checkbox的操作,讓年齡這一類變成直接輸入
          ok,嘗試一下。
          三、問題出現,如果年齡的地方我們輸入一個非數字呢,所以為了安全起見,我們加入一個驗證器,禁止用戶輸入非數字
          在上邊的內容下加入
          Text text = (Text)cellEditor[3].getControl();
                  text.addVerifyListener(
          new VerifyListener(){
                      
          public void verifyText(VerifyEvent e){
                          String inStr 
          = e.text;
                          
          if (inStr.length() > 0){
                              
          try{
                                  Integer.parseInt(inStr);
                                  e.doit 
          = true;
                              }
          catch(Exception ep){
                                  e.doit 
          = false;
                              }

                          }

                      }

                  }
          );
          好了,再試試是否不能輸入非整數了?解決。其實還是有些問題的,試著輸入個0,呵呵。這里就需要你自己按照自己的實際需求來實現了。
          但作為demo這個的目的已經達到了。
          source下載:http://www.aygfsteel.com/Files/dreamstone/jface-3.rar
          posted on 2009-08-27 14:54 單飛 閱讀(560) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 松潘县| 平阳县| 璧山县| 江永县| 册亨县| 昌平区| 丹寨县| 龙南县| 金平| 太保市| 渝北区| 辉县市| 将乐县| 枣庄市| 营口市| 崇文区| 共和县| 安化县| 鹤壁市| 长岭县| 崇礼县| 富源县| 临江市| 广河县| 商丘市| 丁青县| 鄂托克前旗| 阿城市| 兴仁县| 塔城市| 太仆寺旗| 伊川县| 塘沽区| 娱乐| 宿松县| 柘荣县| 寿宁县| 昌图县| 凤阳县| 温泉县| 枣阳市|