是否可以以编程方式将Eclipse RCP按钮设置为“已检查”?

时间:2013-02-13 18:53:25

标签: java eclipse-rcp eclipse-plugin

我想在这里以编程方式设置Eclipse插件操作(按钮):

enter image description here

例如,如果用户按下它,我不希望它在某些条件下切换。

此代码在此创建动作(按钮):

class MyAction extends Action {
    public MyAction() {
        super(NAME, IAction.AS_CHECK_BOX);
    }

    ...
    Thread.sleep(100); wait a little bit incase there is a thread update issue
    if (condition)
        setChecked(true); // does not work, it does not force the button to appear as depressed. It just keeps toggling.
    ...
}

由于某种原因,setChecked(true)不起作用。

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是你在setChecked内调用Action.run()的事实。由于单击复选框的效果之一是检查它,因此您正在偷偷尝试取消正在进行的操作。实际上,我认为在Action.run()返回后检查框架代码集为真,所以它会踩到你的更改。

Action有一种让你以更明确的方式控制它的方法。不是实施.run(),而是实施.runWithEvent(Event)。此函数传入一个Event对象,您可以使用该对象进行更精细的控制。

在这种情况下,我认为您要将Event.doit设置为false。来自文档:

  

将此字段设置为false将取消操作。

另一个选项

根据条件的计算方式,您可能希望在更改时抢先启用/禁用复选框。通过这种方式,您还可以阻止工具提示或类似工具解释禁用它的原因。