Eclipse - 自定义启动配置 - 应用/恢复按钮

时间:2015-11-04 14:34:20

标签: java eclipse eclipse-plugin swt

我正在制作自定义启动配置类型。我实现了启动配置选项卡,并遇到了一个奇怪的问题。当我做以下

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 个答案:

答案 0 :(得分:2)

我不仅仅从这些信息中知道你的问题,而只是要检查一些事情:

  1. 您是否确认正在调用setDirty(true)(例如使用println或断点?)
  2. 您是否将手表放在org.eclipse.debug.ui.AbstractLaunchConfigurationTab.fDirty上以查看它是否会变回?
  3. 你是否压倒isDirty
  4. 从表中删除某个项目会导致启动配置以某种方式变为无效,即当启动配置中包含无效值时,您无法Apply。例如,要保存,canSave必须为启动配置中的所有选项卡返回true
  5. 这是设置“应用”按钮的启用状态的(其中一个)位置:

    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。 (甚至可能是在这个不寻常的时间响应事件导致问题?)