gef中經常會有很多連線,這些連線如何和每個node連接,允不允許交叉等等都是用router來控制的.網上有篇文章對這個做了一些介紹:
http://www-128.ibm.com/developerworks/cn/opensource/os-ecl-gef/part2/
我現在做的這個項目需要在兩個node之間同時存在多根線,如果不使用router的話就只能看見一根,在diagram的 figure里面set一個FanRouter作為缺省的router就可以解決這個問題.兩個node之間如果存在多根連線的話,FanRouter會把它們分布成扇形,每根連線都可以看見.但是FanRouter好像只能在diagram的figure里面設置,如果每根connection你都設置成FanRouter,反而不會啟效果,這可能跟它的handlecollision方法的算法有關.
但是設置成FanRouter之后有一個問題:我的項目中還有那種自連接的connection(該connection的source和target是同一個node),原先我是把這種connection的router設置為bendconnectionrouter,但是后來設置了FanRouter之后BendConnectionRouter好像就失效了,不管你的connection上面有多少個bendpoint都看不出來效果.
后來終于找到了讓這兩張router和平共處的辦法,只要加一行:fanRouter.setNextRouter(new BendPointConnectionRouter());setNextRouter這個方法有點怪,按照字面的理解,應該是fanrouter的下一個router,按理說應該是先用fanrouter來layout 連線,然后再使用BendPointConnectionRouter來layout 連線,但是它實際上是先用BendPointConnectionRouter來layout 連線,然后再使用fanRouter.