我的ScrollingGraphicalViewer显示在ViewPart中。但是,如果所包含的图大于ViewPart,则会出现一个滚动条,并且无法看到整个图。相反,我想缩小直到无需滚动即可看到整个图。

我已经尝试调用viewer.zoomTo(Rectangle),但是显然,该方法尚未实现。还有另一种方法可以实现这一目标吗?

我仍然需要滚动功能,因此必须使用ScrollingGraphicalViewer。仅在第一次打开ViewPart时,应如上所述调整缩放比例。

最佳答案

尝试安装GEF LayoutListener来绘制图形。覆盖内容editpart的#createFigure()方法(例如DiagramEditPart#createFigure()。
像这样:

protected IFigure createFigure() {
    IFigure f = super.createFigure();
    f.addLayoutListener(new LayoutListener.Stub(IFigure container) {
        public void postLayout() {
             Rectangle diagramBounds = new PrecisionRectangle(container.getBounds());
             container.translateToAbsolute(diagramBounds);

             /*
              * Do the scale factor calculation based on you viewport/control size
              */

             ZoomManager zoomManager = (ZoomManager)DiuagramEditPart.this.getViewer().getProperty(ZoomManager.class.toString());
             if (zoomManager != null) {
                  zoomManager.setScale(scaleFactor);
             }
        }
    });
    return f;
}

10-06 03:20