六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

JGraph開發(fā)經(jīng)驗談

[摘要]契子   本來一直很少有機會接觸swing或AWT的,只是最近公司要做一個工作流定制界面,所以才終于得償所愿。我知道,如果一切從底層做起的話,恐怕時間、精力都不允許,而現(xiàn)成的一些工作流產(chǎn)品又不能滿足公司特定行業(yè)工作流的需求,所以只好找一個開源的中間件進行修改了。就這樣,慢慢的認識了JGraph……...
契子

  本來一直很少有機會接觸swing或AWT的,只是最近公司要做一個工作流定制界面,所以才終于得償所愿。我知道,如果一切從底層做起的話,恐怕時間、精力都不允許,而現(xiàn)成的一些工作流產(chǎn)品又不能滿足公司特定行業(yè)工作流的需求,所以只好找一個開源的中間件進行修改了。就這樣,慢慢的認識了JGraph……
  關于JGraph,open-open上是這樣介紹的:JGraph,純Java開發(fā)的圖形組件,支持拖,放,縮放,合并等其它操作。它可以被結(jié)合到任何的Swing應用程序當中。
  在JGraph的網(wǎng)站上可以看到,它分為Free、Pro和Layout Pro版本,作為廣大的“勞苦民眾”來說,當然首選Free版了,呵呵~~

  JGraph的畫圖機制

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

  JGraph將圖元定義為一個一個的cell,每個cell可以是一個頂點(Vertex)、邊(Edge)或者節(jié)點(Port)中的一種。頂點可以有鄰接的頂點,他們通過邊相聯(lián)系,邊聯(lián)接的兩個端點稱為目標和源,每個目標或者源是一個節(jié)點。節(jié)點是頂點的孩子。每個cell都可以有自己的孩子。
  每個cell的外觀由相應的屬性定義,屬性序列是指一系列的鍵-值對,他們以Map形式組織,例如:

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

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

  //定義畫布的屬性
  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的擴展

  JGraph只是提供單純的圖形繪制功能,不包含實際的數(shù)據(jù),所以要想辦法把自己的數(shù)據(jù)“加”進去才行,這恐怕就得考慮擴展JGraph了。
  頂點(Vertex)對應的類為org.jgraph.graph.DefaultGraphCell
  邊(Edge)對應的類為org.jgraph.graph.DefaultEdge
  節(jié)點(Port)對應的類為org.jgraph.graph.DefaultPort
  我們要做的,僅僅是分別繼承相應的類,并把自己的數(shù)據(jù)對象放進去而已。當然,還可以改變相應的外觀屬性。不過如果你對繪圖事件也感興趣的話(呵呵,十有八九應該有用的),還要留意一下org.jgraph.graph.BasicMarqueeHandler和org.jgraph.graph.GraphUndoManager這兩個類呢。BasicMarqueeHandler中包括了在畫布上點擊鼠標、增加連線、合并等等事件的處理,而GraphUndoManager則主管撤銷、回復事件
  如果仔細操作,你也許回發(fā)現(xiàn),點擊邊(Edge)的端點進行移動的事件并不由GraphUndoManager來處理,這時候就要再關注一個類了:org.jgraph.graph.EdgeView.EdgeHandle,這是一個內(nèi)部類,如果需要的話,自己重寫一個類繼承它吧。這樣,大部分需要的事件都盡在自己的掌握中了
  嘿嘿~~~~

  總結(jié)

  其實也沒什么好總結(jié)的,寫本文也是猶豫再三才開鍵盤的,本來準備在上個月就寫呢。一直拖到現(xiàn)在,因為覺得只是簡單的應用而已,全是基本功,沒有一點“高級”的“新意”,好像實在沒什么好寫的。
  今天在BlogJava上看了一篇帖子,感觸頗深,其中一句“整天口若懸河新技術(shù),不如將經(jīng)典的舊技術(shù)爛醉于心”,一語解開了困惑我很長時間的一個疑團!從基本功做起,不是高手,唯手熟而……

  后記

  如果有朋友對類似的項目感興趣,歡迎指點,共同研究討論。



主站蜘蛛池模板: 一级一级一级毛片免费毛片 | 中文字幕伦伦精品 | 青草免费| 亚洲国产一区在线观看 | 色综合久久综合网观看 | 亚洲三级影视 | 日韩精品国产自在欧美 | 四虎精品永久在线网址 | 亚洲伊人久久大香线蕉综合图片 | 日本大片a | 色噜噜狠狠狠狠色综合久一 | 中文字幕乱码系列免费 | 日本韩国理论片大全在线 | 亚州一级毛片在线 | 日本久久综合网 | 四虎免费视频 | 天堂色区 | 亚洲狼人综合网 | 日本高清天码一区在线播放 | 青青草国产免费久久久91 | 欧洲免费极品videos | 亚洲视频在线免费看 | 午夜成年免费观看视频 | 日本五级床片免费 | 五月天色区 | 色综合久久久久久久久五月 | 亚洲国产99在线精品一区69堂 | 中文亚洲欧美 | 欧美一级在线观看 | 伊人干综合网 | 深夜视频在线播放视频在线观看免费观看 | 伊人久久伊人 | 婷婷春色 | 中文天堂最新版www官网在线 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片美女图片 | 香蕉视频一级片 | 人人看人人干 | 日本高清一级片 | 越南一级淫片高清视频 | 亚洲精品午夜在线观看 | 亚洲成a人片在线观看中文动漫 |