如何初始化切换按钮';视图中的选择状态';eclipse rcp中的工具栏

如何初始化切换按钮';视图中的选择状态';eclipse rcp中的工具栏,eclipse,eclipse-rcp,Eclipse,Eclipse Rcp,我在RCP中为我的视图提供了一个切换样式工具栏。现在,我想知道如何从我的视图中设置按钮的状态(因为它是一个切换按钮)。或者,至少,如何在加载视图后初始化它的状态(切换状态可以变化,不是静态的) 我试图从视图中调用:getViewSite().getActionBars().getMenuManager().getItems()(返回IContributionElements的数组),我对该数组进行了迭代并查找id。但该数组仅包含按钮的模型,无法通过这些对象更改选择 救命 您可以将项目强制转换为A

我在RCP中为我的视图提供了一个切换样式工具栏。现在,我想知道如何从我的视图中设置按钮的状态(因为它是一个切换按钮)。或者,至少,如何在加载视图后初始化它的状态(切换状态可以变化,不是静态的)

我试图从视图中调用:getViewSite().getActionBars().getMenuManager().getItems()(返回IContributionElements的数组),我对该数组进行了迭代并查找id。但该数组仅包含按钮的模型,无法通过这些对象更改选择


救命

您可以将项目强制转换为
ActionContributionItem
,获取
操作
并调用
setChecked()


在命令的定义(plug-In.xml)中,
CommandContributionItem
调用,定义如下所示的状态元素:

<state class="org.eclipse.ui.handlers.RegistryToggleState:true"
     id="org.eclipse.ui.commands.toggleState">
</state>

要将状态更改为特定状态,请尝试command.getState()和state.setValue()方法,如示例所示:

private void refreshToggleButtonState(String commandID, String constantID) {

    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);  
    Command command = commandService.getCommand(commandID);  

    State state = command.getState(RegistryToggleState.STATE_ID);
    if (Activator.getDefault().getPreferenceStore().getBoolean(constantID)) {
        state.setValue(Boolean.TRUE);
    } else {
        state.setValue(Boolean.FALSE);
    }
}

constantID是首选项存储参数,假设您有一个。

My item的类型为CommandContributionItem。我可以调用getCommand()而不是getAction()(返回ParameterizedCommand类型),但是没有方法可以帮助我further@simlei啊,抱歉-我正在使用工具栏中的操作,不知道如何使用命令谢谢,这说明了一切。非常精确和敏锐,再次感谢!另外:如果有人想知道是否有可能切换菜单项的状态——只需查看HandlerUtil toggle方法中的代码并进行调整即可。但要直观地更新贡献,您必须实现IElementUpdater并更新updateElement()中的UI元素@Kemoda状态与command绑定,因此如果状态id为
org.eclipse.ui.commands.toggleState
,则切换在commandmenu项上起作用。如果您没有使用toggleState id,那么您必须像您所说的那样使用updateElement自己设置它。
 HandlerUtil.toggleCommandState(command);
private void refreshToggleButtonState(String commandID, String constantID) {

    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);  
    Command command = commandService.getCommand(commandID);  

    State state = command.getState(RegistryToggleState.STATE_ID);
    if (Activator.getDefault().getPreferenceStore().getBoolean(constantID)) {
        state.setValue(Boolean.TRUE);
    } else {
        state.setValue(Boolean.FALSE);
    }
}