/* (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);
                }
              });
    }
  }
Exemplo n.º 2
0
 public void activate(ColumnViewerEditorActivationEvent activationEvent) {
   if (activationEvent.eventType != ColumnViewerEditorActivationEvent.TRAVERSAL) {
     super.activate(activationEvent);
   }
 }
 public void activate() {
   if (activeEditor != null) {
     activeEditor.activate();
   }
 }