Eclipse RCP:在状态行中设置Image

时间:2013-03-08 14:44:27

标签: eclipse-rcp

我正在开发一个RCP应用程序,我想设置状态行。我发现我可以扩展ActionBarAdvisor类,并通过覆盖方法fillStatusLine()方法我可以设置状态。

private StatusLineContributionItem statusItem;

@Override
protected void fillStatusLine(IStatusLineManager statusLine) {
    statusItem = new StatusLineContributionItem("LoggedInStatus");
    statusItem.setText("Logged in");
    statusLine.add(statusItem);
}

现在,我希望设置图像。可以将图像添加到状态行吗?

2 个答案:

答案 0 :(得分:2)

您需要覆盖StatusLineContributionItem中的fill(复合父级)方法。在那里,您可以添加自定义组件(图像,按钮等到状态行)。例如:http://book.javanb.com/eclipse-rich-client-platform-designing-coding-and-packaging-java-applications-oct-2005/ch17lev1sec7.html

org.eclipsercp.hyperbola/StatusLineContribution
public void fill(Composite parent) {
  Label separator = new Label(parent, SWT.SEPARATOR);
  label = new CLabel(parent, SWT.SHADOW_NONE);

  GC gc = new GC(parent);
  gc.setFont(parent.getFont());
  FontMetrics fm = gc.getFontMetrics();
  Point extent = gc.textExtent(text);
  if (widthHint > 0)
    widthHint = fm.getAverageCharWidth() * widthHint;
  else
    widthHint = extent.x;
  heightHint = fm.getHeight();
  gc.dispose();

  StatusLineLayoutData statusLineLayoutData = new StatusLineLayoutData();
  statusLineLayoutData.widthHint = widthHint;
  statusLineLayoutData.heightHint = heightHint;
  label.setLayoutData(statusLineLayoutData);
  label.setText(text);
  label.setImage(image);
  ...
}

答案 1 :(得分:0)

你可以使用以下类:org.eclipse.ui.texteditor.StatusLineContributionItem.class这包含方法setImage(Image image)。

可以在:eclipse安装的plugins / org.eclipse.ui.workbench.texteditor_(version).jar中找到。

这是类扩展:org.eclipse.jface.action.StatusLineContributionItem.class。

注意有两个名为的类:StatusLineContributionItem.class,另一个位于:plugins / org.eclipse.jface_(version).jar,并命名为:org.eclipse.jface.action.StatusLineContributionItem.class。

然而,这个不包含setImage(图像)方法。

然后你可以打电话:

StatusLineManager statusLine = new StatusLineManager();

StatusLineContributionItem i = new StatusLineContributionItem("myid");
i.setText("myText");
i.setImage(SWTResourceManager.getImage(MyClass.class, "config.gif");
...
statusLine.add(i);
...
return statusLine;

如果您想要完全自定义,可以使用上面的解决方案覆盖填充(复合复合)方法。

参考: http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2Ftexteditor%2FStatusLineContributionItem.html