我有一个应用程序,我正在e4中构建,但我很难将几个部分固定大小。我有一个PartSashContainer
,其中包含两个Parts
和另一个PartSashContainer
。我最初在containerData
参数中设置了大小,但这些值是相对的,并且仍允许重新调整部件的大小。我想确保这些部件是固定的高度,不能重新调整大小。有这么简单的方法吗?
答案 0 :(得分:0)
Eclipse bug 361731是对此功能的请求。目前尚未实施。
可以使用自定义渲染器,但这很难。
答案 1 :(得分:0)
我不确定这是否在Neon之前可用,但是Eclipse Neon允许你添加" NoMove"作为Part Sash Container
的标记,您想锁定而不是调整大小。
答案 2 :(得分:0)
我有一个非常相似的任务,几次偶然发现了您的问题。我需要按照带有固定大小的应用程序标头和固定大小的页脚的企业设计来实现RCP应用程序。我找不到完美的方法,但是vogella tutorial on custom renderers给了我一些提示。我仍然必须重复一些代码,但找不到聪明的方法。
我的要求:
所以我所做的是:
public class MainWorkbenchRendererFactory extends WorkbenchRendererFactory {
private final static String MAIN_SASH_ID = "myapp.partsashcontainer.main";
@Override
public AbstractPartRenderer getRenderer(MUIElement uiElement, Object parent) {
if (uiElement instanceof MPartSashContainer
&& MAIN_SASH_ID.equalsIgnoreCase(((MPartSashContainer)uiElement).getElementId())) {
MainSashRenderer renderer = new MainSashRenderer();
super.initRenderer(renderer);
return renderer;
}
return super.getRenderer(uiElement, parent);
}
}
在“ MainSashRenderer”类中,将引用从“ SashLayout”更改为“ MainSashLayout”。
在“ MainSashLayout”类中,方法tileSubNodes:
// subsctract size for header and footer:
availableSpace -= (this.footerHeightPx + this.headerHeightPx);
// Subtract off the room for the sashes
availableSpace -= ((childCount - 1) * sashWidth);
if (availableSpace < 0)
availableSpace = 0;
for (MUIElement subNode : visibleChildren) {
if (childNum == 0) {
newSize = this.headerHeightPx;
} else if (childNum == visibleChildren.size()-1) {
newSize = this.footerHeightPx;
} else {
// Calc the new size as a %'age of the total
double ratio = getWeight(subNode) / totalWeight;
newSize = (int) ((availableSpace * ratio) + 0.5);
}
...
具有不同窗口大小的结果(页眉和页脚保持其像素高度): Screenshots with different window sizes