欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GEF中的锚点Anchor

程序员文章站 2024-03-24 11:46:22
...

还是昨晚做的小例子。实现的是给图形添加连线、删除连线以及连线的重新定向。

不过,当我试着把图形换成椭圆时,却发现连线不是太好看:

GEF中的锚点Anchor

连线与图形之间竟然会出现空白区域。

原来问题出在锚点(Anchor)上。连线是连接的两个锚点,而不是图形。参考了GEF自带的Shapes例子,在ShapeEditPart类里看见如下变量声明:

private ConnectionAnchor anchor;
而且接下来有一个根据模型类型创建 不同类型锚点的方法:
protected ConnectionAnchor getConnectionAnchor() {
    if (anchor == null) {
        if (getModel() instanceof EllipticalShape)
            anchor = new EllipseAnchor(getFigure());
        else if (getModel() instanceof RectangularShape)
            anchor = new ChopboxAnchor(getFigure());
        else
            // if Shapes gets extended the conditions above must be updated
            throw new IllegalArgumentException("unexpected model");
    }
    return anchor;
}

这样,获得锚点的各种方法就可以调用上面的方法:

public ConnectionAnchor getSourceConnectionAnchor(
        ConnectionEditPart connection) {
    return getConnectionAnchor();
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
    return getConnectionAnchor();
}
public ConnectionAnchor getTargetConnectionAnchor(
        ConnectionEditPart connection) {
    return getConnectionAnchor();
}
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
    return getConnectionAnchor();
}

从上边的代码使用了两种锚点:EllipseAnchor与ChopboxAnchor。ChopboxAnchor就是我做的例子中原来使用的;EllipseAnchor嘛,看名字应该是为Ellipse量身定制的吧!

参考上边的代码修改我的例子,果然成功了:

GEF中的锚点Anchor

好好学习,天天向上!

转载于:https://my.oschina.net/plumsoft/blog/28535