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