【发布时间】:2018-10-19 12:11:42
【问题描述】:
我正在为 Eclipse RCP 应用程序开发一个插件。在这个插件中,我想在修剪状态栏中设置一条短信和一个图标。
考虑到我的情况,我认为我可以放弃以下方法:
ActionBarAdvisor 方法似乎需要主应用程序设置状态栏内容。这不合适,因为插件应该能够独立于应用程序,反之亦然。
StatusLineContributionItem 似乎绑定到某个视图。在我的情况下,无论当前选择的视图如何,都必须为整个应用程序全局设置内容。
这让我们采用Contributing to the Status Bar/Trim in Eclipse RCP 方法。我已经按照这种方法设置了一个小示例实现:
plugin.xml 实现:
<menuContribution
allPopups="false"
locationURI="toolbar:org.eclipse.ui.trim.status">
<toolbar
id="mypackage.toolbarContribution">
<control
class="mypackage.StatusBarContribution">
</control>
</toolbar>
</menuContribution>
以及类的实现:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
public class StatusBarContribution extends WorkbenchWindowControlContribution {
protected Composite composite = null;
@Override
protected Control createControl(Composite parent) {
FillLayout layout = new FillLayout(SWT.HORIZONTAL);
layout.marginHeight = 0;
layout.marginWidth = 0;
composite = new Composite(parent, SWT.NO_TRIM | SWT.BORDER);
composite.setLayout(layout);
Text text = new Text(composite, SWT.NONE);
text.setText("foo");
return composite;
}
}
但这只会在状态栏中给我一小段文字:
我故意设置
composite = new Composite(parent, SWT.NO_TRIM | SWT.BORDER);
能够看到布局边距:
那么,我在这里错过了什么吗?使用其他边距属性或 SWT 位样式?
【问题讨论】:
-
您可以尝试使用 GridLayout 而不是 FillLayour。在文本上使用带有宽度和高度提示的 GridData。
-
嗨 Greg,我在将布局更改为 GridLayout 后尝试了以下操作但没有成功:
GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, false, true); gridData.heightHint = text.computeSize(SWT.DEFAULT, SWT.DEFAULT).y; text.setLayoutData(gridData); -
@Niklas 你有没有成功解决这个问题?我刚刚将我的 RCP 应用从 Kepler 升级到 2020-03,现在遇到了与您描述的相同的问题。
标签: java layout swt eclipse-rcp