博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TWaver局部自动布局及嵌套Group处理
阅读量:5241 次
发布时间:2019-06-14

本文共 3084 字,大约阅读时间需要 10 分钟。

TWaver提供了一些布局算法帮助我们快速为网元设置位置,很多情况下已经够用了,但是对于一些复杂的布局还需要我们自己做一些处理,看下面这个例子:

运行截图:


这个时候直接使用TNetwork#doLayout就不好使了,因为doLayout会对network中所有网元使用同一种布局算法,但是截图中Group下多个子Group各有自己的布局方式,我的解决办法是,先对最外层的Group整个布局,然后递归遍历子Group,单独对他们进行布局

代码实现:


TWaver中实现局部布局可以通过两种方式:

  • 将要布局的Element加入到一个新的TNetwork中,然后用新的TNetwork布局
  • TWaver默认只对选中的Element布局,所以可以将要布局的Element加入到SelectionModel中

在这个demo中,首先用第一种方式对最外层的Group进行布局:

//layoutNetwork是用来布局的临时network//生成Group时,已经将布局方式存入ClientPropertylayoutDatabox.addElementWithDescendant(group1);layoutNetwork.doLayout((Integer)group1.getClientProperty("layout"),false);

然后递归遍历group,为子group布局

recursionChild(group1);............................................ private void recursionChild(Group group){        for(int i=0;i

最后附上全部代码

public class LayoutTest extends JPanel {    TDataBox layoutDatabox=new TDataBox();    TNetwork layoutNetwork=new TNetwork(layoutDatabox);    public LayoutTest(){        TNetwork network=new TNetwork();        ResizableNode gatewayNode=new ResizableNode();        gatewayNode.putCustomDraw(true);        gatewayNode.putCustomDrawShapeFactory(TWaverConst.SHAPE_ROUND_RECTANGLE_HALF);        gatewayNode.putCustomDrawGradient(false);        gatewayNode.putCustomDrawFillColor(new Color(254, 254, 206));        gatewayNode.setSize(70, 30);        gatewayNode.setName("Gateway");        gatewayNode.putLabelPosition(TWaverConst.POSITION_CENTER);        Group group1=createGroup(4,TWaverConst.LAYOUT_TREE);        Group group1_1=createGroup(12,TWaverConst.LAYOUT_CIRCULAR);        Group group1_2=createGroup(5,TWaverConst.LAYOUT_EAST);        Link group1_2Link=new Link((Node)group1.getChildren().get(0),(Node)group1_2.getChildren().get(0));        setLinkStyle(group1_2Link);        group1.addChild(group1_2);        group1.addChild(group1_2Link);        Link group1_1Link=new Link((Node)group1.getChildren().get(0),(Node)group1_1.getChildren().get(0));        setLinkStyle(group1_1Link);        group1.addChild(group1_1);        group1.addChild(group1_1Link);//layoutNetwork是用来布局的临时network//生成Group时,已经将布局方式存入ClientProperty        layoutDatabox.addElementWithDescendant(group1);        layoutNetwork.doLayout((Integer)group1.getClientProperty("layout"),false);        recursionChild(group1);        TDataBox box=new TDataBox();        box.addElementWithDescendant(group1);        box.addElement(gatewayNode);        group1.putGroupOpaque(true);        group1.putGroupFillColor(new Color(154,206,254));        network.setDataBox(box);        this.setLayout(new GridLayout(1,3));        this.add(network);        Layer layer=new Layer();        box.getLayerModel().addLayer(layer);        box.getLayerModel().moveToTop(layer);        Link link1=new Link(group1,gatewayNode);        setLinkStyle(link1);        link1.setLinkType(TWaverConst.LINK_TYPE_ORTHOGONAL);        link1.setLayerID(layer.getID());        box.addElement(link1);    }    /**     * 递归Group设置布局     * @param group     */    private void recursionChild(Group group){        for(int i=0;i

代码和思路都很简单,希望能抛砖引玉,大家有建议或好的想法也可以交流一下

转载于:https://www.cnblogs.com/twaver/archive/2012/10/11/2719512.html

你可能感兴趣的文章
struts 的应用
查看>>
磁盘测试工具
查看>>
eclipse查看jdk及maven依赖包源码
查看>>
[HDU]3371 Connect the Cities
查看>>
那些年我们刷过的手机
查看>>
python--数据类型--1
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
进程间的八种通信方式----共享内存是最快的 IPC 方式
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
BNU29140——Taiko taiko——————【概率题、规律题】
查看>>
POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】
查看>>
java 得到以后的日期
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
python安装easy_intall和pip
查看>>
HDU1004
查看>>