eclipse中,继承ViewPart通过ScalableFreeformRootEditPart、EditPartFactory和EditDomain绘制ScrollingGraphicalViewer,怎么设置可以时用户在拖动ViewPart边框时ScrollingGraphicalViewer的content显示始终居中
时间: 2024-02-21 08:59:29 浏览: 81
自定一View,直接继承View,考虑padding和warp_content
要实现当用户在拖动ViewPart边框时,ScrollingGraphicalViewer的content显示始终居中,可以在ScalableFreeformRootEditPart中重写calculatePreferredSize方法,通过计算当前viewport的中心点和content的中心点的偏移量来实现。具体实现代码如下:
```java
@Override
protected Dimension calculatePreferredSize(int wHint, int hHint) {
Dimension d = super.calculatePreferredSize(wHint, hHint);
if (getViewer() instanceof ScrollingGraphicalViewer) {
ScrollingGraphicalViewer viewer = (ScrollingGraphicalViewer) getViewer();
IFigure viewport = viewer.getFigure();
IFigure content = viewer.getContents();
if (viewport != null && content != null) {
Rectangle vpBounds = viewport.getBounds();
Rectangle contentBounds = content.getBounds();
int offsetX = (vpBounds.width - contentBounds.width) / 2 - contentBounds.x;
int offsetY = (vpBounds.height - contentBounds.height) / 2 - contentBounds.y;
viewer.setViewportLocation(new Point(offsetX, offsetY));
}
}
return d;
}
```
在这里,我们首先调用了父类的calculatePreferredSize方法来获取默认的PreferredSize,然后判断当前的Viewer是否是ScrollingGraphicalViewer类型,如果是,我们获取当前viewport和content的bounds,然后计算出content中心点和viewport中心点之间的偏移量,最后通过viewer.setViewportLocation方法将viewport的位置设置为content中心点的位置加上偏移量。这样就可以实现当用户在拖动ViewPart边框时,ScrollingGraphicalViewer的content显示始终居中了。
阅读全文