TableViewer, TreeViewer双击编辑

在TreeViewer或TableViewer中,可用CellEditor结合CellModifier可以很实现表格的编辑功能
但是默认的是单击,就会打开编辑区域。有时候我们会需要双击进行(或者其他),于是我写了一个
DoubleCellModifier,只要让你的CellModifier继承它,就可以很方便实现双击编辑。

具体代码如下:
java 代码
 
  1. package com.longthsoft.rcppart.ui;  
  2.   
  3. import org.eclipse.jface.viewers.ICellModifier;  
  4. import org.eclipse.jface.viewers.TableViewer;  
  5. import org.eclipse.jface.viewers.TreeViewer;  
  6. import org.eclipse.swt.events.MouseAdapter;  
  7. import org.eclipse.swt.events.MouseEvent;  
  8. import org.eclipse.swt.widgets.Item;  
  9.   
  10. public abstract class DoubleClickCellModifier implements ICellModifier {  
  11.      
  12.     private boolean doubleClick;  
  13.     private Object element;  
  14.     private String property;  
  15.      
  16.     public DoubleClickCellModifier(final TableViewer tableViewer) {  
  17.         tableViewer.getTable().addMouseListener(new MouseAdapter() {  
  18.             @Override  
  19.             public void mouseDoubleClick(MouseEvent e) {  
  20.                 if (allowModify(element, property)) {  
  21.                     int column = UIUtil.getPropertyColumnIndex(tableViewer, property);  
  22.                     doubleClick = true;  
  23.                     tableViewer.editElement(element, column);  
  24.                     doubleClick = false;  
  25.                 }  
  26.             }  
  27.         });  
  28.     }  
  29.      
  30.     public DoubleClickCellModifier(final TreeViewer treeViewer) {  
  31.         treeViewer.getTree().addMouseListener(new MouseAdapter() {  
  32.             public void mouseDoubleClick(MouseEvent e) {  
  33.                 if (allowModify(element, property)) {  
  34.                     int column =UIUtil.getPropertyColumnIndex(treeViewer, property);  
  35.                     doubleClick = true;  
  36.                     treeViewer.editElement(element, column);  
  37.                     doubleClick = false;  
  38.                 }  
  39.             }  
  40.         });  
  41.     }  
  42.      
  43.     public boolean canModify(Object element, String property) {  
  44.         this.element = element;  
  45.         this.property = property;  
  46.         if (doubleClick) {  
  47.             return true;  
  48.         } else {  
  49.             return false;  
  50.         }  
  51.     }  
  52.      
  53.     public void modify(Object element, String property, Object value) {  
  54.         if (element instanceof Item) {  
  55.             element = ((Item) element).getData();  
  56.         }  
  57.         doModify(element, property, value);  
  58.     }  
  59.      
  60.     public boolean allowModify(Object element, String property) {  
  61.         return true;  
  62.     }  
  63.      
  64.     public abstract void doModify(Object element, String property, Object value);  
  65. }  

你可能感兴趣的:(eclipse,UI)