/* (non-Javadoc) * @see org.eclipse.jface.viewers.CellEditor#activate(org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent) */ @Override public void activate(ColumnViewerEditorActivationEvent activationEvent) { if (activationEvent.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL || activationEvent.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC) { // 通过tab键激活或者程序调用激活需要显示control super.activate(activationEvent); } else { // 这里特殊处理 // 当用户用鼠标点击时希望直接改变值而不显示控件 // 1、如果这里不用ui的异步执行,因为fireApplyEditorValue()方法中会将cellEditor这个内部变量设置为null,导致 // org.eclipse.jface.viewers.ColumnViewerEditor.activateCellEditor(ColumnViewerEditorActivationEvent)的207行出现空指针错误 // 利用异步执行后,会在activateCellEditor方法后才执行,就不会出错 // 2、其次因为有个异步问题,会出现combobox出现一瞬间后消失,会让用户感觉上不好,所以需要屏蔽这种现象 // 采用的方法是先禁用父容器的重绘,就是父容器的显示将不变化,当全部操作以后才恢复父容器的重绘,其中的闪现问题将消失 getControl().getParent().setRedraw(false); Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { bValue = !bValue; fireApplyEditorValue(); getControl().getParent().setRedraw(true); } }); } }
public void activate(ColumnViewerEditorActivationEvent activationEvent) { if (activationEvent.eventType != ColumnViewerEditorActivationEvent.TRAVERSAL) { super.activate(activationEvent); } }
public void activate() { if (activeEditor != null) { activeEditor.activate(); } }