Eclipse - 自定义启动配置 - apply/revert 按钮
Eclipse - custom launch configuration - apply/revert buttons
我正在制作我的自定义启动配置类型。我实施了启动配置选项卡并遇到了奇怪的问题。当我执行以下操作时
private void update() {
setDirty(true);
updateLaunchConfigurationDialog();
}
在我的启动配置选项卡 class 的一个地方,它工作正常并且应用按钮被启用。但是当我在另一个地方这样做时,它不起作用。我在 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
?
- 从 table 中删除一个项目会导致启动配置以某种方式变得无效,即当启动配置中有无效值时,您不能
Apply
。例如,为了可保存,canSave
必须 return 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
。 (甚至可能是在这个不寻常的时间响应事件导致了问题?)
我正在制作我的自定义启动配置类型。我实施了启动配置选项卡并遇到了奇怪的问题。当我执行以下操作时
private void update() {
setDirty(true);
updateLaunchConfigurationDialog();
}
在我的启动配置选项卡 class 的一个地方,它工作正常并且应用按钮被启用。但是当我在另一个地方这样做时,它不起作用。我在 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
? - 从 table 中删除一个项目会导致启动配置以某种方式变得无效,即当启动配置中有无效值时,您不能
Apply
。例如,为了可保存,canSave
必须 returntrue
对于所有作为启动配置一部分的选项卡。
这是设置“应用”按钮启用状态的(其中一个)位置:
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
。 (甚至可能是在这个不寻常的时间响应事件导致了问题?)