国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

大巧不工 JGraph簡(jiǎn)介和使用技巧

2019-11-18 14:52:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  本來(lái)一直很少有機(jī)會(huì)接觸Swing或AWT的,只是最近公司要做一個(gè)工作流定制界面,所以才終于得償所愿。我知道,假如一切從底層做起的話(huà),恐怕時(shí)間、精力都不答應(yīng),而現(xiàn)成的一些工作流產(chǎn)品又不能滿(mǎn)足公司特定行業(yè)工作流的需求,所以只好找一個(gè)開(kāi)源的中間件進(jìn)行修改了。就這樣,慢慢的熟悉了JGraph……

  關(guān)于JGraph,open-open上是這樣介紹的:JGraph,純java開(kāi)發(fā)的圖形組件,支持拖,放,縮放,合并等其它操作。它可以被結(jié)合到任何的Swing應(yīng)用程序當(dāng)中。

  在JGraph的網(wǎng)站上可以看到,它分為Free、PRo和Layout Pro版本,作為廣大的“勞苦民眾”來(lái)說(shuō),當(dāng)然首選Free版了,呵呵~~

  JGraph的畫(huà)圖機(jī)制

  參照了JGraph的example和源代碼,發(fā)現(xiàn):

  JGraph將圖元定義為一個(gè)一個(gè)的cell,每個(gè)cell可以是一個(gè)頂點(diǎn)(Vertex)、邊(Edge)或者節(jié)點(diǎn)(Port)中的一種。頂點(diǎn)可以有鄰接的頂點(diǎn),他們通過(guò)邊相聯(lián)系,邊聯(lián)接的兩個(gè)端點(diǎn)稱(chēng)為目標(biāo)和源,每個(gè)目標(biāo)或者源是一個(gè)節(jié)點(diǎn)。節(jié)點(diǎn)是頂點(diǎn)的孩子。每個(gè)cell都可以有自己的孩子。

  每個(gè)cell的外觀由相應(yīng)的屬性定義,屬性序列是指一系列的鍵-值對(duì),他們以Map形式組織,例如:

  //定義Edge的外觀
  Map map = new Hashtable();
  GraphConstants.setLineEnd(map, GraphConstants.ARROW_CLASSIC);
  GraphConstants.setEndFill(map, true);
  GraphConstants.setLabelAlongEdge(map, true);
  getAttributes().applyMap(map);

  而“畫(huà)布”(類(lèi)JGraph,不妨如此理解吧)也可以有自己的外觀屬性。例如:

  //定義畫(huà)布的屬性
  setBackground(Color.decode("#C0C0C0"));
  setEditable(false);
  setCloneable(false);
  setInvokesStopCellEditing(true);
  setJumpToDefaultPort(true);
  setPortsVisible(false);
  setGridEnabled(false);
  setGridVisible(false);
  setGridMode(JGraph.CROSS_GRID_MODE);
  setGridColor(Color.decode("#808080"));
  setGridSize(10);

  JGraph的擴(kuò)展

  JGraph只是提供單純的圖形繪制功能,不包含實(shí)際的數(shù)據(jù),所以要想辦法把自己的數(shù)據(jù)“加”進(jìn)去才行,這恐怕就得考慮擴(kuò)展JGraph了。

  頂點(diǎn)(Vertex)對(duì)應(yīng)的類(lèi)為org.jgraph.graph.DefaultGraphCell

  邊(Edge)對(duì)應(yīng)的類(lèi)為org.jgraph.graph.DefaultEdge

  節(jié)點(diǎn)(Port)對(duì)應(yīng)的類(lèi)為org.jgraph.graph.DefaultPort

  我們要做的,僅僅是分別繼續(xù)相應(yīng)的類(lèi),并把自己的數(shù)據(jù)對(duì)象放進(jìn)去而已。當(dāng)然,還可以改變相應(yīng)的外觀屬性。不過(guò)假如你對(duì)繪圖事件也感愛(ài)好的話(huà)(呵呵,十有八九應(yīng)該有用的),還要留意一下org.jgraph.graph.BasicMarqueeHandler和org.jgraph.graph.GraphUndoManager這兩個(gè)類(lèi)呢。BasicMarqueeHandler中包括了在畫(huà)布上點(diǎn)擊鼠標(biāo)、增加連線(xiàn)、合并等等事件的處理,而GraphUndoManager則主管撤銷(xiāo)、回復(fù)事件

  假如仔細(xì)操作,你也許回發(fā)現(xiàn),點(diǎn)擊邊(Edge)的端點(diǎn)進(jìn)行移動(dòng)的事件并不由GraphUndoManager來(lái)處理,這時(shí)候就要再關(guān)注一個(gè)類(lèi)了:org.jgraph.graph.EdgeView.EdgeHandle,這是一個(gè)內(nèi)部類(lèi),假如需要的話(huà),自己重寫(xiě)一個(gè)類(lèi)繼續(xù)它吧。這樣,大部分需要的事件都盡在自己的把握中了

  總結(jié)

  其實(shí)也沒(méi)什么好總結(jié)的,寫(xiě)本文也是猶豫再三才開(kāi)鍵盤(pán)的,本來(lái)預(yù)備在上個(gè)月就寫(xiě)呢。一直拖到現(xiàn)在,因?yàn)橛X(jué)得只是簡(jiǎn)單的應(yīng)用而已,全是基本功,沒(méi)有一點(diǎn)“高級(jí)”的“新意”,似乎實(shí)在沒(méi)什么好寫(xiě)的。

  今天在BlogJava上看了一篇帖子,感慨頗深,其中一句“整天口若懸河新技術(shù),不如將經(jīng)典的舊技術(shù)爛醉于心”,一語(yǔ)解開(kāi)了困惑我很長(zhǎng)時(shí)間的一個(gè)疑團(tuán)!從基本功做起,不是高手,唯手熟而……

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 枣阳市| 渝中区| 思南县| 监利县| 广德县| 惠安县| 隆德县| 泽州县| 罗源县| 龙泉市| 漳州市| 邻水| 雅江县| 加查县| 新郑市| 无棣县| 准格尔旗| 新干县| 昌平区| 定远县| 江陵县| 清水县| 三门县| 平江县| 法库县| 湛江市| 靖宇县| 新蔡县| 马尔康县| 唐山市| 高邮市| 林州市| 夹江县| 筠连县| 新干县| 五家渠市| 定南县| 大洼县| 伊宁市| 桂阳县| 永康市|