eclipse中,在ViewPart中画的ScrollingGraphicalViewer怎么实现缩放,以及拖动Viewpart时如何通知ScrollingGraphicalViewer的内容重新布局使其一直居中
时间: 2024-05-03 21:19:09 浏览: 129
要实现ScrollingGraphicalViewer的缩放,你需要使用ZoomManager。以下是一个简单的示例代码:
```java
ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
ZoomManager zoomManager = new ZoomManager(viewer.getRootEditPart().getZoomManager(), viewer.getViewport());
zoomManager.setZoomLevels(new double[] { 0.1, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0, 4.0, 5.0 });
zoomManager.setZoomLevelContributions(Arrays.asList(ZoomManager.FIT_ALL, ZoomManager.FIT_HEIGHT, ZoomManager.FIT_WIDTH));
viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
viewer.setEditDomain(new DefaultEditDomain(null));
viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer));
viewer.setViewport(new Viewport(true));
viewer.setZoomManager(zoomManager);
```
上述示例中,我们首先创建了一个ScrollingGraphicalViewer实例,并获取其ZoomManager。然后我们设置了可用的缩放级别以及缩放模式(FIT_ALL,FIT_HEIGHT,FIT_WIDTH)。接着通过MouseWheelZoomHandler实现鼠标滚轮缩放功能,并将其添加到viewer中。最后设置viewer的EditDomain、KeyHandler、Viewport和ZoomManager。
要在拖动Viewpart时通知ScrollingGraphicalViewer的内容重新布局使其一直居中,你需要实现ViewPart中的dragOver方法。以下是一个简单的示例代码:
```java
@Override
public boolean dragOver(DropTargetEvent event) {
if (viewer != null) {
Point point = Display.getDefault().map(null, viewer.getControl(), event.x, event.y);
viewer.scrollTo(point.x, point.y);
return true;
}
return false;
}
```
上述示例中,我们首先将屏幕坐标转换为viewer坐标。然后调用viewer的scrollTo方法来保持viewer内容在屏幕中心。最后返回true以指示拖放操作已成功处理。
阅读全文