Jgraph http://www.jgraph.com/ 是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点:
1) 完全Swing兼容;
2) 简单、高效的设计;
3) 时间效率高;
4) 100 %纯Java;
jGraph简介
jGraph具有相当高的交互性和自动化,是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中,比如流程图、UML、交通线路、网络等等。
jGraph在本文撰写时版本为5.8.0.0,可以在链接出找到jGraph的主页。
jGraph主要包括以下一些产品:
JGraph - The Java Open Source Graph Drawing Component ( 有Open Source )
JGraph Layout Pro - The Java Graph Layout Solution
JGraphpad Pro Diagram Editor Framework
MxGraph Thin Client - JGraph in a browser!
咱们只是学习嘛,当然只用jGraph咯。jGraph Layout Pro是一个对图进行布局的软件,但是目前要收费的,jGraph对图的操作包括:图显示、图交互、图布局、图分析等。
JGraph 的基本SWING 组件如下:
org.jgraph Basic JGraph 类
org.jgraph.event Graph 事件模型
org.jgraph.graph Graph 结构及结点
org.jgraph.plaf Graph UI 委托组件
org.jgraph.util 常用的工具类
补充一下,与jGraph类似的可用于绘图的还有eclipse的GEF。
jGraph模型
一张图——JGraph 类 的主要结构:
JGraph extends JComponent {
org.jgraph.graph.GraphModel model; (DefaultGraphModel)
org.jgraph.plaf.GraphUI ui; (BasicGraphUI)
org.jgraph.graph.GraphLayoutCache cache;
}
JGraph 除了SWING的MVC结构,即引用了MODEL和UI外,他还保持着一个奇怪的应用GraphLayoutCache。 GraphLayoutCache 可以被看作是MODEL的一个扩展,它的作用是保证图中各结点的状态以及一些外观等。因为图的复杂性,使用一个GraphLayoutCache 可以用来处理这些复杂问题。
配置JGraph可以使用一系列的set方法,有许多很有用的功能可以开关。
图的逻辑结构——GraphModel 类:
满足MVC的要求,GraphModel保存着所有的图中的对象,它的默认实现DefaultGraphModel能够满足一般的需求。
GraphModel包含三个基本操作:insert() , edit() , remove() 。这些操作会起到与GraphLayoutCache相同的效果,但与GraphLayoutCache略微不同的是它的参数比较多,乍看下去比较麻烦。 其实GraphModel所要求的只是结点的逻辑结构,对于结点的细节它并不关心。所以可以在初始化图时使用GraphModel,不要常常用它的方法来 对细节做修改,这既不方便,也没必要。
另外,就是GraphModel提供了许多get方法,可以很方便检索相应的结点。
Cells
JGraph 的单位(Cells) 有三种:Vertex、 Edge、 Port。
Vertex 可以携带对象,由于JGraph是只负责表示的,并不真正负责数据的操作。那么在图形和数据间就需要一个使者,这就是Vertex ,Vertex 可以是文字、图形等对象。
Port 是一般比较陌生的单位,在图的算法中并不设计Port,但在图形表示中它十分有用。如同它的名字,他是Vertex上的一个端口,可以通过端口连接其他Vertex,而在JGraph中Port还可以用于改变Edge的形状等等。
Edge 与图算法中的边也有一点不同,Edge 是只能连接Port而不是Vertex的。这样,因为多了Port单元,使得Edge更加灵活、更加丰富了。
默认单元——DefaultCell:
它是DefaultEdge和DefaultPort的父类,又是DefaultMutableTreeNode的子类,其地位可以相当于Vertex。 一个DefaultCell可以携带一个UserObject。每个DefaultCell还有一个AttributeMap,负责它的属性(颜色、大小 等等)。用一套set方法可以修改AttributeMap。
边和端口单元——Edge、Port:
除了继承DefaultCell,Edge、Port还有一些独有的方法。
Edge有getSource() 和 getTarget() 方法,用以获得边的两端的对象(一般为Port)。还一个路由类,定义了一些路由方法。
Port 主要任务是承载Edge,所以有一些关于获得Edge的方法。另外,Port还定义了获得锚(比如一个Vertex中包含一个Port)的方法。
Cell的处理:
每个Cell包括Cell Object、Cell Renderer、Cell Editor、Cell Handle。其中Renderer负责Cell的表示,包括形状等等。Editor 做Cell的修改用,当双击Cell后则调用Editor来编辑Cell。以上都是类似与JTable 和 JTree的。
Handle 是SWING的组件中没有的,它的任务是处理Cell的大小与移动。可以重写paint()方法来指定经过鼠标拖动所导致的Cell大小和位置变化。
对于这些单元的属性的控制,可以仔细看看GraphConstants这个类的set方法,基本上所有的属性都是用这个类的set修改的。
二、JGraph设计
1) MVC
Swing是Java(Sun)提供的UI标准实现之一,Swing基于AWT(Abstract Windowing Toolkit)。JGraph完全兼容Swing,它的实现仍然基于MVC体系结构。
JGraph 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的分析:
相关推荐
jgraphx 包 API文档
jgraphx包,jgraph的升级版本
Draw.io 绘图工具
draw.io是一个可配置的图表/白板可视化应用程序。draw.io 由英国软件公司JGraph Ltd拥有和开发。,可以绘制流程图、UML、类图、组织结构图、泳道图、E-R图、思维导图等等draw.io支持多种方式使用:网页访问、客户端、VSCode插件、jetbrains插件。
JGraph中文资料
JGraph 图形 流程图 文档 中文资料
JGraph学习
JGraph学习都说JGraph是mvc的。 下面就写一个图形编辑器展开学习。 图形编辑器首先要能够画图(包括图形的拖放,属性设置),其次将图形保存,然后考虑高级特性:undo/redo,open已存在,缩放,布局,输入输出格式等。 第一部分 1. JGraph程序或应用的基本结构JGraph中用类JGraph来表示一个图,
有向图自动布局-JGraph--demo
JGraph,有向图自动布局,内置多种布局策略,支持层状、环装等多种布局方式。
JGraph文档和demo
介绍JGraph框架,还有一些demo和一些架包!
基于jgraphpad构建工作流建模的图像编辑器(修改中.....,乱)
基于jgraphpad构建工作流建模的图像编辑器 基于jgraphpad构建工作流建模的图像编辑器下文中注意用词:JGraph和JGraphpad是两个概念。后者是基于前者的一个应用。在JGraph中讨论的问题是基于JGraph的应用,包括JGraphpad,都会遇到的,体现了基本的原理。 问题1:如何实现多种形状的vertex?解决:com.jgra
jgraphpad.jar包
该jar包是实现jgraph的一个实例,是基于jgraph项目的一个程序集。
一个mvc结构的例子java_一个 jgraph的例子 | 学步园
Jgraph http://www.jgraph.com/ 是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点:1) 完全Swing兼容;2) 简单、高效的设计;3) 时间效率高;4) 100 %纯Java;jGraph简介jGraph具有相当高的交互性和自动化,是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中,比如流程图、UML、交通线路、网络等等。jGraph...
Jgraph中文讲义
Jgraph所有的讲解,以及使用方法说明等
避坑指南:QCustomPlot鼠标事件冲突解决方案(左键拖动vs右键框选)
本文深入解析QCustomPlot在QT框架下的高级交互实现,重点解决左键拖动与右键框选的冲突问题。通过自定义事件处理和QRubberBand技术,提供了一套完整的无冲突交互方案,帮助开发者优化数据可视化应用的用户体验。
初识jGraph
初识jGraph序 在为老师写项目的时候我急需一个基于java的图形组件,第一次搜索就搜索到了jGraph。总体感觉还是挺容易上手的,是一套能够应对多种图形用途的工具。虽然我对其中一些编程的风格有些不是很满意。不过能做出来就是好的!而且效果十分出色,感谢jGraph社团带给我们的强大工具。 最令我欣赏的是,jGraph在对需要使用jGraph Layout Pro的
FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
FPGA学习之路——原码二位乘法器及Verilog代码分析 原理 原码乘法可以分为原码一位乘和原码二位乘,两者在实现规则上大同小异。原码一位乘每次判断乘数的最低位,对被乘数和部分积进行相应操作。而原码二位乘则是对乘数的低二位进行判断,并执行相关操作。 两位乘数的取值可以有四种可能组合,每种组合对应于以下操作: 00相当于0x,部分积Dresult右移2位,不进行其他运算; 01相当于1x,部分积D...
JGraph学习笔记(一)
总算空下来了,开始正式学习JAVA图形编程, 先熟悉下SWING,JGRAGH. [转]在Java中使用JGraph实现图形绘制 http://soft.yesky.com/132/2209132.shtml本来一直很少有机会接触swing或AWT的,只是最近公司要做一个工作流定制界面,所以才终于得偿所愿。我知道,如果一切从底层做起的话,恐怕时间、精力都不允许,而现成的一些
python 常见算法(1-50题)
常见的算法题
台达PLC DIAdesigner-AX 编程笔记
1、登陆台达思图软件网站,选择Download,登陆注册好的账号,下载DIAInstaller,下载后安装(安装目录不要修改);
jGraph简介
Jgraph http://www.jgraph.com/ 是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点: 1) 完全Swing兼容; 2) 简单、高效的设计; 3) 时间效率高; 4) 100 %纯Java; jGraph简介 jGraph具有相当高的交互性和自动化,是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中,比如...
一篇文章带你搞定数学建模中的线性回归模型(05年长江水质问题示例讲解含代码)
文章目录一、问题分析二、原理讲解三、MATLAB 实现线性回归模型 一、问题分析 根据你的预测分析,如果未来10年内每年都要求长江干流的Ⅳ类和Ⅴ类水的比例控制在20%以内,且没有劣Ⅴ类水,那么每年需要处理多少污水 为了达到题目中所要求的水质,可建立废水排放量与各类水百分比之间的二元线性回归模型,对未来十年的废水排放量进行预测,并确定其与各类水所占百分比之间的函数关系式。通过此关系式,可以计算在这种情况下长江所能承受的最大污水排放量,将这个排放量与预测的排放量进行比较,多出来的部分就是需要每年处理掉的。 二、
JGraph分析
JGraph分析 Johnny.DengJGraph是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点:1) 完全Swing兼容;2) 简单、高效的设计;3) 时间效率高;4) 100 %纯Java;
Kubeflow系统性学习教程:从入门到高级实践
Kubeflow学习教程摘要(150字): Kubeflow是基于Kubernetes的云原生MLOps平台,提供端到端机器学习解决方案。核心功能包括Jupyter Notebooks开发环境、Pipelines工作流编排、分布式训练支持和模型服务部署。教程采用三阶段学习路径:初学者搭建Kind集群体验Notebooks;中级开发自定义Pipeline组件;高级实现企业级应用。通过容器化和K8s CRD深度集成,解决环境一致性、实验跟踪和资源调度等MLOps痛点,相比MLflow/Airflow更适合大规模
【具身智能】感知 × 决策 × 执行:一个智能体的认知闭环怎么搭?
构建一个真正能在现实世界中运作的具身智能体,并不是简单地拼接“视觉 + 控制器 + 动作模块”就能完成的,它必须是一个**认知闭环结构**:能感知环境、理解状态、制定策略、执行动作,并从结果中学习反馈。 本讲将深入剖析具身智能的三大核心支柱:**感知系统、决策系统、执行系统**,并解析它们如何协同构建出一个“能观察、能思考、能行动”的智能体。
[转]初识jGraph
序 在为老师写项目的时候我急需一个基于java的图形组件,第一次搜索就搜索到了jGraph。总体感觉还是挺容易上手的,是一套能够应对多种图形用途的工具。虽然我对其中一些编程的风格有些不是很满意。不过能做出来就是好的!而且效果十分出色,感谢jGraph社团带给我们的强大工具。 最令我欣赏的是,jGraph在对需要使用jGraph Layout Pro的学术应用只收半价,这
使用 MATLAB/Simulink 构建一个基于FOC控制的PMSM矢量控制仿真模型
本教程详细介绍了基于MATLAB/Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)系统建模与仿真方法。主要内容包括:PMSM电机模型参数设置、Clarke/Park变换模块设计、电流环PID控制器配置、SVPWM调制实现以及系统仿真参数优化。文章提供了模块化设计思路和具体参数设置示例,并给出了PID整定建议和进阶优化方向。通过该仿真模型,可深入理解PMSM矢量控制原理,掌握高性能电机控制系统的建模技巧,适用于伺服系统、电动汽车驱动等高端控制场景。教程还推荐了实时仿真和高级控制策略等扩展应用。
图形化组件JGraph
JGraph分析 Johnny.DengJGraph是一个开源的,兼容Swing的基于MVC体系结构图形组件,具有以下特点:1) 完全Swing兼容;2) 简单、高效的设计;3) 时间效率高;4) 100 %纯Java;生成的图例 二、JGr
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
Jgraph的使用
轨道 package APIs; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Point2D; import org.jgraph.graph.CellViewRenderer; import org.jgraph.graph....
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
JGraph 画出你想要的图形
最近在学着使用开源的JGraph,为了能添加一个自己的cell,看了一堆帖子。这些帖子有一个特点,千篇一律,你转我的,我转你的,感觉太没意思了吧,始终只能画出锥形。后来还是直接搜索英文的了,搜到了The JGraph Tutorial。其中给了一个很好的例子,我略作了一些修改,功能是添加了一个自己的EllipseCell,画出了椭圆或者圆,这个取决于代码中的GraphConstants.set...
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
3628



被折叠的 条评论
为什么被折叠?



