kooyee ‘s blog

开源软件, 众人努力的结晶, 全人类的共同财富
posts - 103, comments - 55, trackbacks - 0, articles - 66
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

[SWT]不用jface给表格的单元格增加编辑功能

Posted on 2007-07-20 21:14 kooyee 阅读(840) 评论(0)  编辑  收藏 所属分类: GUI骨衣

先建立table editor 

//create table editor 
   final TableEditor editor = new TableEditor(tablePrice);
   
//The editor must have the same size as the cell and must
   
//not be any smaller than 50 pixels.
   editor.horizontalAlignment = SWT.LEFT;
   editor.grabHorizontal 
= true;
   editor.minimumWidth 
= 50;

 

下面的Listener 用来确定表格中鼠标选定的单元格的序号 

//   listerner for the cell that mouse point to
   tablePrice.addListener(SWT.MouseDown, new Listener() {
    
public void handleEvent(Event event{
     Point pt 
= new Point(event.x, event.y);
     TableItem item 
= tablePrice.getItem(pt);
     
if (item == null)
      
return;
     
for (int i = 0; i < 5; i++{
      Rectangle rect 
= item.getBounds(i);
      
if (rect.contains(pt)) {
       EDITABLECOLUMN 
= i;
      }

     }

    }

   }
);

 

加入这个Listener对选定的项进行编辑

tablePrice.addSelectionListener(new SelectionAdapter() {
    
public void widgetSelected(SelectionEvent e) {
     
// Clean up any previous editor control
     Control oldEditor = editor.getEditor();
     
if (oldEditor != null) oldEditor.dispose();
  
     
// Identify the selected row
     TableItem item = (TableItem)e.item;
     
if (item == nullreturn;
  
     
// The control that will be the editor must be a child of the Table
     Text newEditor = new Text(tablePrice, SWT.NONE);
     newEditor.setText(item.getText(EDITABLECOLUMN));
//取得当前单元格里的值
      newEditor.addModifyListener(new ModifyListener() //text Modify 的Listener
      public void modifyText(ModifyEvent me) {
       Text text 
= (Text)editor.getEditor();
       editor.getItem().setText(EDITABLECOLUMN, text.getText());
      }

     }
);
     newEditor.selectAll();
     newEditor.setFocus();
     editor.setEditor(newEditor, item, EDITABLECOLUMN);
    }

   }
);

 如果需要在table更新时text editor消失,可以加入以下code

item.addDisposeListener(new org.eclipse.swt.events.DisposeListener(){
                    
public void widgetDisposed(org.eclipse.swt.events.DisposeEvent e) {
                        
//editor.dispose();
                        newEditor.dispose();
                        
                    }

                }
);

 

或者当非激活时,除去text editor

newEditor.addFocusListener(new org.eclipse.swt.events.FocusAdapter() {
                    
public void focusLost(org.eclipse.swt.events.FocusEvent e) {
                        newEditor.dispose();        
                    }

                }
);

只有注册用户登录后才能发表评论。


网站导航: