邋遢居

我的Java天堂

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

今天有幸碰到关于Connection以及Router使用的问题。觉得有点意思就把它记了下来。以背后查。

看到一个例子中看到图 -- 1所示的功能。


图-1.JPG

其中图-1中的连线是自适应的会保持该线段是最短的(其实他是使用的ShortestPathConnectionRouter,这个时候我还不知道,我是一个新手大家见笑了)。经过一番调查以后发现原来是在EditPart中的refreshVisuals方法中有如下代码。

代码--1

if  (spRouter  ==   null ) {
            ConnectionLayer cLayer 
=  (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER);
            FanRouter router 
=   new  FanRouter();
            router.setSeparation(
30 );
            spRouter 
=   new  ShortestPathConnectionRouter(getFigure());
            router.setNextRouter(spRouter);
            cLayer.setConnectionRouter(router);
        }

当时就猜啊,他肯定是在给一个特定的Layer加上一个什么玩意。然后就通过这个玩意来完成对于路径的计算(其实这些东西完全是从代码的字面意思而得到的)。我这些东西加到我的代码中了。但是我运行的效果还是没有起作用。他依旧是以前的那幅得行。我抓,抓也没有用。就是达不到我要的效果。

抱着试一下的想法我打开了我的ConnectionEditPart(就是连线的那个EditPart),发现在createFigure中我是这么写的。

代码 -- 2

PolylineConnection connection  =  (PolylineConnection) super .createFigure();
       
        connection.setConnectionRouter(
new  BendpointConnectionRouter(){
            
public   void  route(Connection conn) {
                GraphAnimation.recordInitialState(conn);
                
if  ( ! GraphAnimation.playbackState(conn))
                    
super .route(conn);
            }
        });

很明显我在这里给connection赋了一个ConnectionRouter。最终其效果的是这一个ConnectionRouter起作用了。

Md刚掉他就万事大吉了。

到这里代码部分其实就完了。但是他背后的还有一点故事。

这里有三个角色:

1Connection

2ConnectionAnchor.

3 ConnectionRouter

这个类是用来显示两点之间的线段 (Line), 他的起点和终点是通过 ConnectionAnchor 来定义的。至于他的其他点是通过 ConnectionRouter 计算设置的。从这个地方来看 ConnectionRouter 是一个负责计算的工具类。这样完全可以让所有的 Connection 使用一个 ConnectionRouter 实例(这就是今天最要记下的部分)。

gef 中他就为我们提供了这样的机制。下面的这段话是 Gef help 中的一句话。他就说明了这个道理。

A convenient way to share the router with all connections and to place connections above the drawing is to use a ConnectionLayer. The layer has a connection router property which it shares with every child that's a connection. You can update this property and easily change every connection's router at once.

这个道理要转换成代码的话就是代码 – 1 了。

这个东西很简单。希望对像我一样的新手有点帮助。

posted on 2006-05-22 22:21 Jet Geng 阅读(1478) 评论(2)  编辑  收藏 所属分类: Eclipse

Feedback

# re: 关于Connection以及Router 2008-05-27 10:27 stonefox
Thanks very much for your help.  回复  更多评论
  

# re: 关于Connection以及Router 2008-05-30 17:51 stonefox
啊 这个是我留的 不过不知道是您啊 呵呵  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: