我正在创建自定义启动配置类型。我实现了启动配置选项卡,并遇到了奇怪的问题。当我执行以下操作时
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!
}
});
我该如何解决?
最佳答案
我不单凭这些信息就知道您的问题,但需要检查的几件事:
您是否已验证正在调用setDirty(true)
(例如,使用println或断点吗?)
您是否将手表放在org.eclipse.debug.ui.AbstractLaunchConfigurationTab.fDirty
上以查看其是否变回原样?
您要覆盖isDirty
吗?
正在从表中删除该项目,从而导致启动配置以某种方式变为无效,即,启动配置中的值无效时,您不能Apply
。例如,要保存,canSave
必须为启动配置中的所有选项卡返回true
。
这是设置“应用”按钮的启用状态的位置之一。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);
}
考虑鼠标监听器是否是您想要的。请注意,您正在响应MouseDown,如果有人将鼠标移至控件上并按Enter / Space,则可能无法实现预期的效果。最典型的操作是按钮的
addSelectionListener
。 (是否有可能在这个不寻常的时间对事件进行响应引起了问题?)