成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

記一次prefuse應(yīng)用實踐(數(shù)據(jù)讀入部分詳細(xì)說明)

curried / 2056人閱讀

摘要:數(shù)據(jù)讀入介紹三種方式常見的格式數(shù)據(jù)的讀入,詳見源碼里的文件因為其他我沒看。直接輸入數(shù)據(jù)主要介紹的部分。數(shù)據(jù)庫讀入見大神博客。

prefuse是一個Java可視化工具包。優(yōu)點是功能強大,缺點是官網(wǎng)文檔不全&代碼沒注釋(要命)……
花了兩天時間熟悉了操作并寫完了自己的工程,專門來寫篇文,希望能幫上某些掉坑的小伙伴www。

1、如何獲取與使用

Github地址在這里,直接clone下來,運行build腳本,會獲得三個jar包,把其中的prefuse.jar加入工程Java Build Path即可。

2、數(shù)據(jù)讀入

介紹三種方式:

常見的xml格式數(shù)據(jù)的讀入,詳見prefuse源碼里的GraphView.java文件(因為其他demo我沒看)。

直接輸入數(shù)據(jù)(主要介紹的部分)。

數(shù)據(jù)庫讀入(見大神博客)。

2.1 xml數(shù)據(jù)讀入

沒什么好說的,按照demo里的socialnet.xml來,如果需要有向圖,可以在文件開頭設(shè)置

2.2 直接輸入讀入

假設(shè)我們需要的做一張有向圖,由點和邊組成,點是名字(唯一name)。

先讀入點:

HashMap 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));
}
3、展示

這部分就很簡單了。大部分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

相關(guān)文章

  • 一次基于vue的spa多頁簽實踐經(jīng)驗

    摘要:然后類似一樣我的命名是可以在頁面的任何地方使用,如果你對具體的實現(xiàn)方法有興趣,歡迎點擊本文結(jié)尾的鏈接,去我的倉庫上查看。 前言 最近收到一個這樣的需求,要求做一個基于 vue 和 element-ui 的通用后臺框架頁,具體要求如下: 要求通用性高,需要在后期四十多個子項目中使用,所以大部分地方都做成可配置的. 要求做成腳手架的形式.可以 npm 安裝 要求實現(xiàn)多頁簽,并且可以通過瀏...

    ispring 評論0 收藏0
  • 一次基于vue的spa多頁簽實踐經(jīng)驗

    摘要:然后類似一樣我的命名是可以在頁面的任何地方使用,如果你對具體的實現(xiàn)方法有興趣,歡迎點擊本文結(jié)尾的鏈接,去我的倉庫上查看。 前言 最近收到一個這樣的需求,要求做一個基于 vue 和 element-ui 的通用后臺框架頁,具體要求如下: 要求通用性高,需要在后期四十多個子項目中使用,所以大部分地方都做成可配置的. 要求做成腳手架的形式.可以 npm 安裝 要求實現(xiàn)多頁簽,并且可以通過瀏...

    張遷 評論0 收藏0
  • 一次 Laravel 應(yīng)用性能調(diào)優(yōu)經(jīng)歷

    摘要:為了一探究竟,于是開啟了這次應(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幾個并...

    warkiz 評論0 收藏0
  • 一次Spring Batch完整入門實踐

    摘要:什么是作為的子項目,是一款基于的企業(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...

    Baaaan 評論0 收藏0
  • 一次翻譯站經(jīng)歷

    摘要:做這個記錄之前,剛完成使用作為公司前端項目的持續(xù)交付工具的實踐,打算寫的教程前先把官方文檔扒下來做個翻譯站。在實踐一番后,卡在不能頻密調(diào)取翻譯這塊上,項目無法進(jìn)行下去。 做這個記錄之前,剛完成使用drone作為公司前端項目的持續(xù)交付工具的實踐,打算寫的教程前先把官方文檔扒下來做個翻譯站。在實踐一番后,卡在不能頻密調(diào)取google翻譯這塊上,項目無法進(jìn)行下去。最后覺得經(jīng)歷的過程涉及的內(nèi)容...

    seasonley 評論0 收藏0

發(fā)表評論

0條評論

curried

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<