JGraph分析

JGraph开发经验谈 契子  本来一直很少有机会接触swing或AWT的,只是最近公司要做一个工作流定制界面,所以才终于得偿所愿。我知道,如果一切从底层做起的话,恐怕时间、精力都不允许,而现成的一些工作流产品又不能满足公司特定行业工作流的需求,所以只好找一个开源的中间件进行修改了。就这样,慢慢的认识了JGraph……  关于JGraph,open-open上是这样介绍的:JGraph,纯Java开发的图形组件,支持 阅读详情

JGraph分析
                                                                        Johnny.Deng

JGraph是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点:

1)   完全Swing兼容;

2)   简单、高效的设计;

3)   时间效率高;

4)   100 %纯Java;

生成的图例
生成的图例

 

二、JGraph设计

1)  MVC

Swing是Java(Sun)提供的UI标准实现之一,Swing基于AWT(Abstract Windowing Toolkit)。JGraph完全兼容Swing,它的实现仍然基于MVC体系结构。

 

 

JGraph MVCJGraph MVC

 

View:

JGraph不包含实际的数据,它提供了数据的视;JGraph对象画图的机制是:

将图元定义为一个一个的cell,每个cell可以是一个顶点(vertex)、边(edge)或者节点(port)中的一种。顶点可以有邻接的顶点,他们通过边相联系,边联接的两个端点称为目标和源,每个目标或者源是一个节点。节点是顶点的孩子。每个cell都可以有自己的孩子。

每个cell的外观由相应的属性定义,属性序列是指一系列的键-值对,他们以Map形式组织,例如:

Map cellAttrib = new Hashtable();

// Set bounds

Rectangle2D helloBounds = new Rectangle2D.Double(20, 20, 40, 20);

GraphConstants.setBounds(cellAttrib, helloBounds);

// Set black border

GraphConstants.setBorderColor(cellAttrib, Color.black);

 

一个cell有类似这样一个cellAttrib的Map,来定义其外观。

外观可以指定诸如一条边的箭头样式等属性。

 

Model:

数据对象可以看成是JGraph中两个独立结构的链接点:grahp结构和group结构。Graph结构基于图论中的顶点、边定义。Group结构是cell的composition结构。Graph结构中getSource()和getTarget()方法,获得源和目标节点。而在group中通过getChild(),getParent()来获得cell的组成结构。

 

2)  低层基于图论逻辑

即:一个图G包含一个非空的元素集V(G)和一个E(G),其中,E(G)是V(G)中两个无序元素组成的二元组。V(G)称为图G顶点的集合,如果任意集合V(G)中的顶点x/y,(x,y)在E(G)中,边(x,y)可能以连接顶点x和y的边(弧)所代表,X与y就被称为邻接的,否则x与y不邻接。

 

三、JGraph的应用

以下是一个基于JGraph的Helloworld的分析:

import省略

public class HelloWorld {

 

  public static void main(String[] args) {

 

    // Construct Model and Graph

    //

    GraphModel model = new DefaultGraphModel();

    JGraph graph = new JGraph(model);

    graph.setSelectNewCells(true);

 

    // Create Nested Map (from Cells to Attributes)

// 此Map中记录所有属性,其中的键-值对是cell-cellAttribute

// 每个cellAttribute又是一个Map,其键-值对是具体一个cell的属性-值

    Map attributes = new Hashtable();

 

//  以下建立两个顶点(cell)Hello和World,并分别设置他们的属性Map

// Create Hello Vertex

    //

    DefaultGraphCell hello = new DefaultGraphCell("Hello");

   

    // Create Hello Vertex Attributes

    //

    Map helloAttrib = new Hashtable();

    attributes.put(hello, helloAttrib);

    // Set bounds

    Rectangle2D helloBounds = new Rectangle2D.Double(20, 20, 40, 20);

    GraphConstants.setBounds(helloAttrib, helloBounds);

    // Set black border

    GraphConstants.setBorderColor(helloAttrib, Color.black);

 

    // Add a Port

    //  每个顶点为了与其他顶点相邻接,必须添加节点(cell)

    DefaultPort hp = new DefaultPort();

    hello.add(hp);

 

    // Create World Vertex

    //

    DefaultGraphCell world = new DefaultGraphCell("World");

 

    // Create World Vertex Attributes

    //

    Map worldAttrib = new Hashtable();

    attributes.put(world, worldAttrib);

    // Set bounds

    Rectangle2D worldBounds = new Rectangle2D.Double(140, 140, 40, 20);

    GraphConstants.setBounds(worldAttrib , worldBounds);

    // Set fill color

    GraphConstants.setBackground(worldAttrib, Color.orange);

    GraphConstants.setOpaque(worldAttrib, true);

    // Set raised border

    GraphConstants.setBorder(worldAttrib,

           BorderFactory.createRaisedBevelBorder());

 

    // Add a Port

    //

    DefaultPort wp = new DefaultPort();

    world.add(wp);

 

// 建立联接两个顶点的边

// Create Edge

    //

    DefaultEdge edge = new DefaultEdge();

   

    // Create Edge Attributes

    //

    Map edgeAttrib = new Hashtable();

    attributes.put(edge, edgeAttrib);

    // Set Arrow

    int arrow = GraphConstants.ARROW_CLASSIC;

    GraphConstants.setLineEnd(edgeAttrib , arrow);

    GraphConstants.setEndFill(edgeAttrib, true);

 

    // Connect Edge

    // 边的两个端点就是两个顶点的child节点(port)

    ConnectionSet cs = new ConnectionSet(edge, hp, wp);

    Object[] cells = new Object[]{edge, hello, world};

 

    // Insert into Model

    // model构件完成

    model.insert(cells, attributes, cs, null, null);

 

    // Show in Frame

    //

    JFrame frame = new JFrame();

    frame.getContentPane().add(new JScrollPane(graph));

    //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.pack();

    frame.setVisible(true);

  }

 

}

16、模型转换:从Petri网到jGraph及API映射的深度解析 本文深入解析了从Petri网到jGraph的模型转换过程,并探讨了元模型与Java对象模型之间的映射机制。通过Eclectic映射语言和领域特定语言(DSL)实现转换规则,结合构造函数映射、用户自定义映射以及设计模式的应用,提升模型转换的灵活性与扩展性。文章还总结了关键操作步骤和技术要点,并通过案例展示了其在实际场景中的应用价值。 阅读详情

相关推荐

掌握JGraph:图表库的使用与自定义实例

在现代Web应用程序中,图形用户界面(GUI)已经成为了必不可少的组成部分,尤其是在流程图、网络图、组织架构图等领域。JGraph,一个基于Java的图形库,为开发者提供了创建和操作这些图形的强大工具。JGraph以其灵活性和强大的功能,在图形库领域占据了一席之地。JGraph图形库可以广泛应用于多种场景,比如软件设计、文档建模、网络拓扑、项目管理等领域。由于其Java语言的平台独立性,JGraph能够帮助开发者轻松地在不同操作系统和浏览器上实现复杂图形的展示和交互。

weixin_32869687的博客 1205

推荐:Jgraph - 灵活可定制的数据可视化库

推荐:Jgraph - 灵活可定制的数据可视化库 项目介绍 Jgraph是一个强大且易于使用的Android图形库,旨在帮助开发者轻松创建动态和交互式的柱状图以及折线图。这个开源项目由mychoices开发并维护,提供了多种图表样式、动画效果和自定义选项,为你的应用添加专业级别的数据可视化功能。 项目技术分析 Jgraph的核心在于它的灵活性和可扩展性。它支持通过XML属性进行高度定制,包括图表类...

gitblog_00070的博客 531

JGraph文档和demo

介绍JGraph框架,还有一些demo和一些架包!

(转)图论的最佳实践- JGraph

看了JGraph的设计文档 --《Design and Implementation of the JGraph Swing Component》,第一次感觉到图论-这一离散数学理论在实际项目中的作用。经典的图论研究图与点和边的关系JGraph扩展了经典图论,将图形应用系统中的图形分解成: Vertex (顶点)、Edge(边)、Port(连接点)三个基本元素。同时JGraph使用两个

桔子的专栏 2228

jgraphx 包 API文档

jgraphx包,jgraph的升级版本

JGraph的开始

JGraph的英文教程 博文链接:https://longyi-java.iteye.com/blog/208906

jGraph简介

Jgraph http://www.jgraph.com/ 是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点: 1) 完全Swing兼容; 2) 简单、高效的设计; 3) 时间效率高; 4) 100 %纯Java; jGraph简介 jGraph具有相当高的交互性和自动化,是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中,比如...

guoguo1982_2001的专栏 839

jgraph官方示例与帮助文档

全面的jgraph使用示例,包括十多个例子,与详细的说明及源代码

探索jgraph:嵌入式WebGL图可视化库

探索jgraph:嵌入式WebGL图可视化库 项目介绍 jgraph 是一个嵌入式的WebGL图可视化库,旨在为开发者提供一个高效、灵活的工具,用于在网页中展示复杂的图形结构。无论是学术研究、数据分析还是教育演示,jgraph 都能帮助你轻松地将图形数据可视化。 项目技术分析 jgraph 的核心技术基于WebGL,这是一种用于在网页上渲染3D图形的JavaScript API。通过WebGL,j...

gitblog_00800的博客 815

jgraph官方文档

最新jgraph官方文档,非常好的学习jgraph资料,全面讲解了jgraph的使用与设计模试

Kisssoft软件在行星齿轮设计上的初试

行星齿轮传动与链传动相比较,具有质量小,体积小,承载能力强,传动比大,传动效率高等优点,但在行星齿轮传动种种优点下,不可避免的带来一些缺点,对其材料的要求过高,在追求传动比大而体积小的同时,其传动结构大大的复杂化,以及在制造和安装过程中较困难,对于行星齿轮传动设计来说,不仅应该了解其优点,而且应该在设计中,充分发挥其优点,且把其缺点降低到最低的限度。从而才能设计出性能优良的行星齿轮传动装置,为我们赛车提供更加强大的动力保证。 Kisssoft软件为我们行星齿轮传动设计提供了一体化方案,从设...

m0_69808569的博客 1万+

【亲测免费】 JGraph 项目教程

JGraph 项目教程 1. 项目介绍 JGraph 是一个开源的 Java 图形库,用于创建和操作图形数据结构。它提供了丰富的图形算法和数据结构,适用于各种图形处理任务。JGraph 最初由 Gaudenz Alder 和 David Benson 在 2000 年创建,是一个纯 Java 语言的项目,旨在扩展 Swing 工具包的功能。 JGraph 的主要特点包括: 支持多种图形类型,如简...

gitblog_00654的博客 1305

FFmpeg流媒体开发避坑指南:avformat_open_input超时设置的那些坑

本文深入剖析了FFmpeg流媒体开发中avformat_open_input函数的超时设置难题。针对默认阻塞行为、无效的timeout参数以及不稳定的线程取消方案等常见误区,文章详细解读了官方推荐的interrupt_callback机制,并提供了健壮的超时控制器实现方案与最佳实践,帮助开发者构建稳定可靠的流媒体应用。

weixin_29239279的博客 238

JWFD正式支持WINDOWS7以上操作系统

在WINDOWS7平台下,JDK1.8版本中,6GB内存,4核心CPU JWFD的随机函数分析器通过了长达187分钟的高强度计算测试。JWFD开发者COMSCI通过升级绘图模块JGRAPH5.12类库,实现支持WINDOWS7或以上操作系统的能力。

comsci的专栏 134

单片机NTC热敏电阻测温:六种实用电路方案与选型指南

本文详细介绍了单片机系统中NTC热敏电阻测温的六种实用电路方案,包括分压法、恒流源法、RC充放电法、电桥法、频率法及集成专用IC方案,并提供了关键的硬件选型指南和软件处理技巧,帮助工程师实现高精度、低成本的温度测量。

herb5的博客 821

分享一份小度在家1C系列NV2101刷机保姆级教程,轻松解锁第三方应用!(内含详细教程、刷机工具和救砖等工具)

分享一份小度在家1C系列NV2101刷机保姆级教程,轻松解锁第三方应用!(内含详细教程、刷机工具和救砖等工具)

XiaoqiangClub的博客 7180

一个mvc结构的例子java_一个 jgraph的例子 | 学步园

Jgraph http://www.jgraph.com/ 是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点:1) 完全Swing兼容;2) 简单、高效的设计;3) 时间效率高;4) 100 %纯Java;jGraph简介jGraph具有相当高的交互性和自动化,是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中,比如流程图、UML、交通线路、网络等等。jGraph...

weixin_40006779的博客 224

手把手教你学Simulink--使用Simulink进行双冗余电机驱动系统的故障切换验证

提高系统可靠性:当一个电机或其驱动器出现故障时,另一个可以立即接管,避免系统停机。增强安全性:对于一些关键任务的应用场景(如飞行控制),确保即使在硬件故障情况下也能维持基本操作能力。简化维护:允许在不影响系统正常工作的情况下进行维护和更换故障部件。确定可能发生的故障类型(如过流、欠压、温度过高),以及每种故障对应的条件。通过上述步骤,我们简要介绍了如何基于Simulink实现双冗余电机驱动系统的故障切换验证。

MHD0815的博客 443

几个可以画网络拓扑图的开源库

之前做个监控系统,需要在GUI客户端有个网络拓扑结构图,实时显示被监控节点的连接情况, 支持动态增减监控节点,能够在拓扑图上自动布局。找到了三个比较合适的库:   SWT的ZEST : 基于draw2D库封装的,增加了一些事件处理,动画效果和几个常见布局; 是个比较粗糙的类库,图节点都被一个矩形框包围,就算是自己定义了透明背景的icon,周围也必须 被一个方框包围,要命的是如果你的图节...

iteye_773的博客 5033

Bert+CNN文本分类(含代码实现)

一、什么是CNN? CNN的特点: (1)特定特征位移不变性 (2)特征缩放不变性 2. CNN模型构造过程 2.1 Convolution(卷积) (1)获取关键特征(减少参数) (2)共享权重(再次减少参数) 2.2 Max Pooling(池化) 2.3 Flatten 向量转换为如图所示可以进入全连接层的向量模式 3. TextCNN 上图可理解为: 通过不同的size(如上图2、3、4等),上图红色代表 size=2,黄色...

Python,数据分析,机器学习,深度学习 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

一个 jgraph的例子

 Jgraph http://www.jgraph.com/ 是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点: 1) 完全Swing兼容; 2) 简单、高效的设计; 3) 时间效率高; 4) 100 %纯Java; jGraph简介         jGraph具有相当高的交互性和自动化,是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中,比如流程图、UML、交

Michael的专栏 3445

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

伟大的MVC模式

前言 省略. 伟大的MVC模式 MVC模式之所以伟大,是因为它符合大脑的工作原理。   大脑在某个时间点关注的内容是唯一的,而MVC恰好把那些杂糅在一起的东西分成外观和内容; 这样人们就能在想关注外功的时候就看V,想关注内容的时候就看M。   MVC是一种架构,在JGraph中可以看到更细小的结构:   mxPoint(位置) mxRectangle(大小) mxCellState(外观) mxC...

isuifeng的专栏 137

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

初识jGraph

初识jGraph序        在为老师写项目的时候我急需一个基于java的图形组件,第一次搜索就搜索到了jGraph。总体感觉还是挺容易上手的,是一套能够应对多种图形用途的工具。虽然我对其中一些编程的风格有些不是很满意。不过能做出来就是好的!而且效果十分出色,感谢jGraph社团带给我们的强大工具。        最令我欣赏的是,jGraph在对需要使用jGraph Layout Pro的

4984
上一篇: OOP编程原则与设计模式(1)
下一篇: U2TP分析
dbigbear
博客等级 码龄24年 54粉丝 149原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值