日食 - 自定义启动配置 - 应用/还原按钮

问题描述:

我正在做我的自定义启动配置类型。我实现了启动配置选项卡并面对奇怪的问题。当我做到以下几点时日食 - 自定义启动配置 - 应用/还原按钮

private void update() { 
    setDirty(true); 
    updateLaunchConfigurationDialog(); 
} 

在我的启动配置选项卡类的一个地方,它工作正常,并且应用按钮变为启用状态。但是当我在另一个地方做,它不起作用。我在https://www.eclipse.org/forums/index.php/t/164755/找到类似的东西,但它并没有帮助我解决这个问题。

请参见下面的代码片段。

addButton.addMouseListener(new MouseListenerAdapter() { 

     @Override 
     public void mouseDown(MouseEvent e) { 
      moveSelectionToTableViewer(tree.getViewer().getTree().getSelection()); 
      table.refresh(); 
      update(); // Apply button is enabled 
     } 

     private void moveSelectionToTableViewer(TreeItem[] selection) { 
      // ... 
     } 
    }); 

    removeButton.addMouseListener(new MouseListenerAdapter() { 

     @Override 
     public void mouseDown(MouseEvent e) { 
      int[] selectionIndices = table.getTable().getSelectionIndices(); 
      table.getTable().remove(selectionIndices); 
      tree.getViewer().refresh(); 
      update(); // Apply button is NOT enabled! 
     } 
    }); 

我该如何解决这个问题?

+1

可能澄清事情的另一个问题。如果您执行“添加”(启用“应用”),然后执行“删除”,是否禁用“应用”按钮? –

+1

作为旁注:用SelectionAdapter替换MouseListener。 – pimpf0r

+0

添加和删除后,应用按钮保持启用状态。是的,我会取代它,谢谢 –

我不知道单从这些信息您的问题,但只是几件事情要检查:

  1. 你有没有证实setDirty(true)被称为(例如,使用的println或断点?)
  2. 有你把手表放在org.eclipse.debug.ui.AbstractLaunchConfigurationTab.fDirty看看它是否改回来了?
  3. 你重写isDirty
  4. 从表中移除一个项目使得启动配置以某种方式变得无效,即不能Apply时无效值都在推出配置。例如,为了可保存,canSave必须返回true作为启动配置一部分的所有选项卡。

这是代替(S),用于设置应用按钮的启用状态(的一个):

org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.updateButtons()

/** 
* updates the button states 
*/ 
private void updateButtons() { 
    boolean dirty = isDirty() && canSave(); 
    fApplyButton.setEnabled(dirty); 
    fRevertButton.setEnabled(dirty); 
} 
  1. 考虑如果一个鼠标听众是你想要的。请注意,您正在响应MouseDown,如果某个用户选中了该控件并按Enter/Space键,则可能无法达到您所期望的效果。更典型的做法是按钮为addSelectionListener。 (难道甚至是响应事件,在这个不寻常的时间导致的吗?)
开始=>
+0

是的,看看update()方法,使用setDirty(真)肯定被称为 2.好主意,我会检查它在几个小时内,在这里报告,感谢 3.无 4.我不这么认为。你能否澄清什么可能是无效的启动配置? –

+1

已更新4以获取更多信息。 BTW至于1我可以看到update()调用setDirty(),但我不能告诉的是,如果您确实确保当您向下执行鼠标时,实际上正在调用该方法,并且没有其他事情出错了(隐藏在引用中的异常,例如)。对不起,如果我对于1是非常基本的,如果你已经证实了这一点,没有冒犯,我只想要最好的答案。 –

+1

添加了第5个选项,尽管我建议您不管:-) –