隐形视图工具栏动作

时间:2013-10-31 07:15:09

标签: eclipse-plugin swt eclipse-rcp jface

我想根据透视变化将某些操作添加到视图工具栏中。 以下是我使特定操作不可见的代码。这段代码没有给我任何影响。 代码执行正常,但它不会从工具栏中消失。

IContributionItem[] items = view.getToolbar().getItems();
                    for (IContributionItem item : items) {
                        if (item instanceof ActionContributionItem) {
                            ActionContributionItem actionItem = (ActionContributionItem) item;
                            if(actionItem.getAction().getId().equals("actionid")){
                                //view.getToolbar().remove("actionid");
                                actionItem.setVisible(false);
                            }
                        }
                    }

1 个答案:

答案 0 :(得分:1)

您需要在工具栏管理器上调用update()方法。

请参阅以下代码段:5秒后项目不可见:

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    final ToolBarManager toolBarManager = new ToolBarManager();
    final Action action1 = new Action("1") {
    };
    action1.setId("1");
    toolBarManager.add(action1);
    final Action action2 = new Action("2") {
    };
    action2.setId("2");
    toolBarManager.add(action2);

    toolBarManager.createControl(shell);

    display.timerExec(5000, new Runnable() {
        @Override
        public void run() {
            final IContributionItem[] items = toolBarManager.getItems();
            for (IContributionItem item : items) {
                if (item.getId().equals("1")){
                    item.setVisible(false);
                }
            }
            toolBarManager.update(true);
        }
    });

    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}