我意识到这是一个不寻常的请求,因为大多数ViewParts都是由工作区布局的,可能是堆栈而不是单方面访问自己的大小。
但是,我想要做的是略有不同。我正在扩展a find-replace bar for eclipse,这让你想起你在firefox中看到的那个(并且比默认值更不突兀)。
因此,对此的需求是在编辑器窗格底部为固定大小。但是,我没有成功设置视图的大小。我试过了
使用ISizeProvider:
public int getSizeFlags(boolean width) {
if (width) {
return SWT.FILL;
}
return SWT.MIN | SWT.MAX;
}
@Override
public int computePreferredSize(boolean width, int availableParallel,
int availablePerpendicular, int preferredResult) {
if (width) {
return preferredResult;
}
return fixedHeight;
}
在我的根窗格及其父窗格上调用setSize()(注意这并不奇怪,这不起作用,因为父级的布局管理器可能会覆盖它。)
使用内部 PartPane类让边界框格尝试以编程方式移动IT。 (不要因为这样做而激怒我,我只是想探索各种可能性。)
private void updateSize(IWorkbenchPartReference pPartRef) {
// FIXME -- this is all internal stuff. is there a public way to do this?
if (pPartRef instanceof WorkbenchPartReference) {
PartPane lPane = ((WorkbenchPartReference) pPartRef).getPane();
Sashes sashes = new Sashes();
if (lPane.getContainer() != null) {
lPane.getContainer().findSashes(lPane, sashes );
Sash topSash = sashes.top;
if (okToUse(topSash)) {
Rectangle parentBounds = topSash.getParent().getBounds();
int topSashTop = parentBounds.height - fixedHeight - topSash.getSize().y;
sashes.top.setLocation(sashes.top.getLocation().x, topSashTop);
topSash.getParent().layout();
System.out.println("sashtop = " + topSashTop);
}
}
}
}
我也尝试过调用PartPane.flushLayout()和PartPane.getContainer.resizeChild(),但这些都没有做任何事情。 这些都不起作用。有没有办法达到我想要的目的?