摘要:數(shù)據(jù)讀入介紹三種方式常見的格式數(shù)據(jù)的讀入,詳見源碼里的文件因為其他我沒看。直接輸入數(shù)據(jù)主要介紹的部分。數(shù)據(jù)庫讀入見大神博客。
prefuse是一個Java可視化工具包。優(yōu)點是功能強大,缺點是官網(wǎng)文檔不全&代碼沒注釋(要命)……
花了兩天時間熟悉了操作并寫完了自己的工程,專門來寫篇文,希望能幫上某些掉坑的小伙伴www。
Github地址在這里,直接clone下來,運行build腳本,會獲得三個jar包,把其中的prefuse.jar加入工程Java Build Path即可。
2、數(shù)據(jù)讀入2.1 xml數(shù)據(jù)讀入介紹三種方式:
常見的xml格式數(shù)據(jù)的讀入,詳見prefuse源碼里的GraphView.java文件(因為其他demo我沒看)。
直接輸入數(shù)據(jù)(主要介紹的部分)。
數(shù)據(jù)庫讀入(見大神博客)。
沒什么好說的,按照demo里的socialnet.xml來,如果需要有向圖,可以在文件開頭設(shè)置
假設(shè)我們需要的做一張有向圖,由點和邊組成,點是名字(唯一name)。
先讀入點:
HashMap3、展示nodesRow = new HashMap (); // 先創(chuàng)建表頭,經(jīng)測試不支持自定義類型 Schema n_sch = new Schema(); n_sch.addColumn("point", String.class); n_sch.lockSchema(); // 然后根據(jù)表頭生成表 Table nodes = n_sch.instantiate(); // 然后存入點的數(shù)據(jù) for (int i = 0; i < points.length; i++) { // 很奇葩,需要先創(chuàng)建一個空行,然后返回行號 int rid = nodes.addRow(); // 然后根據(jù)行號和列名設(shè)置對應(yīng)數(shù)值 nodes.set(rid, "point", points[i]); // 記得把行號記下來,因為prefuse的邊是用行號來唯一指定節(jié)點的,也很奇葩 nodesRow.put(points[i], rid); } // 同理,創(chuàng)建邊的表 Schema e_sch = new Schema(); e_sch.addColumn("from", int.class); e_sch.addColumn("to", int.class); Table arrows = e_sch.instantiate(); // 然后存入邊的數(shù)據(jù) for (int i = 0; i < edges.length; i++) { int rid = arrows.addRow(); arrows.set(rid, "from", nodesRow.get(edges[i].from)); arrows.set(rid, "to", nodesRow.get(edges[i].to)); }
這部分就很簡單了。大部分copy了大神博客里的代碼,修改了一些,看看就好。
// 創(chuàng)建有向圖(幾個參數(shù)分別表示:點,邊,是否有向,邊的source列名,邊的target列名) Graph g = new Graph(nodes, arrows, true, "from", "to"); // 創(chuàng)建可視化對象 Visualization vis = new Visualization(); vis.add("graph", g); // 設(shè)置點上面顯示哪個字段的值,當(dāng)然是points里的point列 LabelRenderer label = new LabelRenderer("point"); // 圓角 label.setRoundedCorner(10, 10); vis.setRendererFactory(new DefaultRendererFactory(label)); // 設(shè)置點的顏色 ColorAction node_fill = new ColorAction("graph.nodes", VisualItem.FILLCOLOR, ColorLib.rgb(200, 200, 200)); ColorAction node_text = new ColorAction("graph.nodes", VisualItem.TEXTCOLOR, ColorLib.rgb(0, 0, 0)); ColorAction node_other = new ColorAction("graph.nodes", VisualItem.STROKECOLOR, 0); // 設(shè)置邊的顏色 ColorAction edge_text = new ColorAction("graph.edges", VisualItem.TEXTCOLOR, ColorLib.rgb(0, 0, 0)); ColorAction edge_fill = new ColorAction("graph.edges", VisualItem.FILLCOLOR, ColorLib.rgb(20, 100, 100)); ColorAction edge_other = new ColorAction("graph.edges", VisualItem.STROKECOLOR, ColorLib.rgb(20, 100, 100)); // 顏色指令 ActionList color = new ActionList(); color.add(node_fill); color.add(node_text); color.add(node_other); color.add(edge_text); color.add(edge_fill); color.add(edge_other); // 畫圖指令 ActionList layout = new ActionList(Activity.INFINITY); layout.add(new ForceDirectedLayout("graph")); layout.add(new RepaintAction()); // 把指令告訴可視化對象 vis.putAction("color", color); vis.putAction("layout", layout); // 生成Java GUI對象 Display display = new Display(vis); display.setSize(800, 600); display.pan(250, 250); display.addControlListener(new DragControl()); display.addControlListener(new PanControl()); display.addControlListener(new ZoomControl()); display.addControlListener(new WheelZoomControl()); display.addControlListener(new FocusControl(1)); display.addControlListener(new ZoomToFitControl()); // 在一個JFrame上顯示出來 JFrame jf = new JFrame(); jf.setSize(800, 600); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.add(display); // 記得運行畫圖指令 vis.run("color"); vis.run("layout"); // 最后設(shè)置為可見即可 jf.setVisible(true);其他
這部分代碼畫畫流程圖肯定夠了,其他更高深的功能兄弟們自己探♂索吧。我用不上所以沒接著看下去……
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67788.html
摘要:然后類似一樣我的命名是可以在頁面的任何地方使用,如果你對具體的實現(xiàn)方法有興趣,歡迎點擊本文結(jié)尾的鏈接,去我的倉庫上查看。 前言 最近收到一個這樣的需求,要求做一個基于 vue 和 element-ui 的通用后臺框架頁,具體要求如下: 要求通用性高,需要在后期四十多個子項目中使用,所以大部分地方都做成可配置的. 要求做成腳手架的形式.可以 npm 安裝 要求實現(xiàn)多頁簽,并且可以通過瀏...
摘要:然后類似一樣我的命名是可以在頁面的任何地方使用,如果你對具體的實現(xiàn)方法有興趣,歡迎點擊本文結(jié)尾的鏈接,去我的倉庫上查看。 前言 最近收到一個這樣的需求,要求做一個基于 vue 和 element-ui 的通用后臺框架頁,具體要求如下: 要求通用性高,需要在后期四十多個子項目中使用,所以大部分地方都做成可配置的. 要求做成腳手架的形式.可以 npm 安裝 要求實現(xiàn)多頁簽,并且可以通過瀏...
摘要:為了一探究竟,于是開啟了這次應(yīng)用性能調(diào)優(yōu)之旅。使用即時編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結(jié)。在經(jīng)歷了調(diào)優(yōu)過程踩的很多坑之后,我們最終完善并實施了初步的性能測試方案,通過真實的測試數(shù)據(jù)歸納出了 Laravel 開發(fā)過程中的一些實踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應(yīng)用程序響應(yīng)有點慢、20幾個并...
摘要:什么是作為的子項目,是一款基于的企業(yè)批處理框架。首先,運行的基本單位是一個,一個就做一件批處理的事情??偨Y(jié)為我們提供了非常實用的功能,對批處理場景進(jìn)行了完善的抽象,它不僅能實現(xiàn)小數(shù)據(jù)的遷移,也能應(yīng)對大企業(yè)的大數(shù)據(jù)實踐應(yīng)用。 前言 本文將從0到1講解一個Spring Batch是如何搭建并運行起來的。本教程將講解從一個文本文件讀取數(shù)據(jù),然后寫入MySQL。 什么是 Spring Batc...
摘要:做這個記錄之前,剛完成使用作為公司前端項目的持續(xù)交付工具的實踐,打算寫的教程前先把官方文檔扒下來做個翻譯站。在實踐一番后,卡在不能頻密調(diào)取翻譯這塊上,項目無法進(jìn)行下去。 做這個記錄之前,剛完成使用drone作為公司前端項目的持續(xù)交付工具的實踐,打算寫的教程前先把官方文檔扒下來做個翻譯站。在實踐一番后,卡在不能頻密調(diào)取google翻譯這塊上,項目無法進(jìn)行下去。最后覺得經(jīng)歷的過程涉及的內(nèi)容...
閱讀 2970·2021-11-22 15:25
閱讀 2251·2021-11-18 10:07
閱讀 1057·2019-08-29 15:29
閱讀 483·2019-08-29 13:25
閱讀 1515·2019-08-29 12:58
閱讀 3211·2019-08-29 12:55
閱讀 2923·2019-08-29 12:28
閱讀 514·2019-08-29 12:16