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 單飛 閱讀(564) 評論(0)  編輯  收藏 所屬分類: Eclipse Plugin
          主站蜘蛛池模板: 温州市| 深圳市| 宝鸡市| 清新县| 称多县| 临海市| 江门市| 新巴尔虎左旗| 仁寿县| 年辖:市辖区| 临洮县| 曲水县| 通河县| 富阳市| 江城| 绩溪县| 宣威市| 栾川县| 濉溪县| 金昌市| 宁强县| 忻城县| 六枝特区| 巴塘县| 白城市| 马关县| 开原市| 恩平市| 库尔勒市| 泗洪县| 平陆县| 桂东县| 台中市| 尚志市| 濮阳市| 惠东县| 永城市| 新兴县| 鲁甸县| 文昌市| 平舆县|