繁体   English   中英

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

[英]Eclipse - custom launch configuration - apply/revert buttons

我正在创建自定义启动配置类型。 我实现了启动配置选项卡,并遇到了奇怪的问题。 当我执行以下操作时

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. 您是否已验证正在调用setDirty(true) (例如,使用println或Breakpoint?)
  2. 您是否在org.eclipse.debug.ui.AbstractLaunchConfigurationTab.fDirty上放置了手表以查看其是否变回原来的状态?
  3. 您是重载isDirty吗?
  4. 正在从表中删除一项,导致启动配置以某种方式变为无效,即,当启动配置中的值无效时,您将无法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);
}
  1. 考虑鼠标监听器是否是您想要的。 请注意,您正在响应MouseDown,如果有人将鼠标移至控件上并按Enter / Space,则可能无法实现预期的效果。 最典型的操作是按钮的addSelectionListener (是否有可能在这个不寻常的时间对事件进行响应引起了问题?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM