2

使用 Eclipse 和 SWT,我目前正在尝试将CommandContributionItem(CCI)作为具有两个文本字段的Buttona 。ViewPart当我按下按钮时,ParameterizedCommand应该使用文本字段的当前文本值作为参数来调用我。

我能够像这样将文本字段的初始值传递给 CCI:

public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout(1, false));

    text = new Text(parent, SWT.BORDER);
    text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    text_1 = new Text(parent, SWT.BORDER);
    text_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    Map<String, String> params = new HashMap<String, String>();
    params.put("myString", text.getText());
    params.put("mySecondString", text_1.getText());

    CommandContributionItemParameter p = new CommandContributionItemParameter(getSite(),
            "commandSyso","com.voo.example.commandparameter.simple.sysoCommand",  CommandContributionItem.STYLE_PUSH);
    p.label = "My Label";
    p.parameters = params;
    CommandContributionItem item = new CommandContributionItem(p);
    item.fill(parent);
}

但它是静态的一次性通行证。有没有办法在每次调用 CCI 时动态更新它?

4

1 回答 1

1

CommandContributionItem参数本质上是静态的。您不能修改它们,只能创建CommandContributionItem.

使用命令时, 的实现IHandler应该使用ExecutionEvent.getApplicationContext(). 如果是IEvaluationContext,则可以使用org.eclipse.ui.handlers.HandlerUtil

但是在您的示例中,您需要某种方式将 2 个文本字段的值提供给框架,或者通过实现一个ISelectionProvider, an ISourceProvider(您可以在其中以新名称提供每个文本字段),或者让您的处理程序检查然后IViewPart通过访问器访问信息。

于 2012-08-20T19:42:16.323 回答