我想在这里以编程方式设置Eclipse插件操作(按钮):
例如,如果用户按下它,我不希望它在某些条件下切换。
此代码在此创建动作(按钮):
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)不起作用。
答案 0 :(得分:0)
我认为这里的问题是你在setChecked
内调用Action.run()
的事实。由于单击复选框的效果之一是检查它,因此您正在偷偷尝试取消正在进行的操作。实际上,我认为在Action.run()
返回后检查框架代码集为真,所以它会踩到你的更改。
Action
有一种让你以更明确的方式控制它的方法。不是实施.run()
,而是实施.runWithEvent(Event)
。此函数传入一个Event对象,您可以使用该对象进行更精细的控制。
在这种情况下,我认为您要将Event.doit
设置为false。来自文档:
将此字段设置为false将取消操作。
另一个选项
根据条件的计算方式,您可能希望在更改时抢先启用/禁用复选框。通过这种方式,您还可以阻止工具提示或类似工具解释禁用它的原因。