问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 图形 框架

发布网友 发布时间:2022-04-25 23:11

我来回答

1个回答

热心网友 时间:2022-05-13 01:16

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不邻接。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 怎样利用java在页面实现树形结构图 java.util 包中有哪几种类 Java类图怎么画? Java 7.1 系统类结构图该怎么画 如何提取在ios系统(iphone/ipad)中App里下载的视频/电影到电脑上 java SE的结构图怎么看 女士西装搭配什么衣服 女士圆领西装怎样搭配 夏天的女士西装要怎么搭配 适合女人穿的西装有哪些?带图片的? 苹果手机怎么把app视频保存到照片 西装外套绝对是秋天最受欢迎的外套之一,女生小西装怎么穿才不会显得太正式? 短西装搭配高腰哈伦裤,这样的汤唯你喜欢吗? 女士小西装该怎么搭配显得更时尚呢? 汤唯的风情万种无人能敌,短西装搭配高腰哈伦裤,时髦有女人味吗? 穿小西装的时候,女人怎样搭配才能显得更时尚? 长款西装+腰带,显腿长又有职业气质,适合职业女性的下装消失吗? 去银行上班会查我的个人征信吗? 适合小学生读的名著 哪些名著适合小学生看? 架构模型图怎么画java 如何查看Java1.7中的类图,所有的 西安北站到咸阳机场城际铁路在哪? 哪位高手能给个Java的IO流类的层次结构呵~ 西安北站到咸阳机场城际铁路怎么换乘? 西安机场城际动车一般多久发一趟? 西安机场城际线全程时间 西安北站到咸阳机场的地铁开通了没? 西安北站到咸阳机场。谁能知道西安北站到咸阳机场是要修高铁,城际铁? 被单位辞退的流程 西安北站到咸阳机场怎么走? 西安北火车站到咸阳机场怎么坐车最快 被公司辞退是怎么回事 城际铁路,西安北站到咸阳机场T3多长时间? 你知道被公司辞退是什么样的感受吗? 西安北客站去机场城际铁时刻表 被公司辞退了 凭什么西安机场城际那么贵? 西安北站到咸阳机场有没有地铁到机场?从西安北站到咸阳机场怎么乖车, 西安北到咸阳机场?