1

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

private StatusLineContributionItem statusItem;

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

现在,我希望将图像与它一起设置。是否可以将图像添加到状态行?

4

2 回答 2

2

您需要在 StatusLineContributionItem 中覆盖 fill(Composite parent) 方法。您可以在那里添加自定义组件(图像、按钮等)到状态行。例如: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);
  ...
}
于 2013-03-09T19:28:54.990 回答
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。

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

然而,这个不包含 setImage(Image image) 方法。

然后您可以致电:

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

于 2015-03-03T06:16:14.917 回答