成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

curried / 2095人閱讀

摘要:數(shù)據(jù)讀入介紹三種方式常見的格式數(shù)據(jù)的讀入,詳見源碼里的文件因?yàn)槠渌覜]看。直接輸入數(shù)據(jù)主要介紹的部分。數(shù)據(jù)庫讀入見大神博客。

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

1、如何獲取與使用

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

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

介紹三種方式:

常見的xml格式數(shù)據(jù)的讀入,詳見prefuse源碼里的GraphView.java文件(因?yàn)槠渌鹍emo我沒看)。

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

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

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

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

2.2 直接輸入讀入

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

先讀入點(diǎn):

HashMap nodesRow = new HashMap();

// 先創(chuàng)建表頭,經(jīng)測(cè)試不支持自定義類型
Schema n_sch = new Schema();
n_sch.addColumn("point", String.class);
n_sch.lockSchema();

// 然后根據(jù)表頭生成表
Table nodes = n_sch.instantiate();

// 然后存入點(diǎn)的數(shù)據(jù)
for (int i = 0; i < points.length; i++) {
    // 很奇葩,需要先創(chuàng)建一個(gè)空行,然后返回行號(hào)
    int rid = nodes.addRow();
    // 然后根據(jù)行號(hào)和列名設(shè)置對(duì)應(yīng)數(shù)值
    nodes.set(rid, "point", points[i]);
    // 記得把行號(hào)記下來,因?yàn)閜refuse的邊是用行號(hào)來唯一指定節(jié)點(diǎn)的,也很奇葩
    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、展示

這部分就很簡(jiǎn)單了。大部分copy了大神博客里的代碼,修改了一些,看看就好。

// 創(chuàng)建有向圖(幾個(gè)參數(shù)分別表示:點(diǎn),邊,是否有向,邊的source列名,邊的target列名)
Graph g = new Graph(nodes, arrows, true, "from", "to");

// 創(chuàng)建可視化對(duì)象
Visualization vis = new Visualization();
vis.add("graph", g);

// 設(shè)置點(diǎn)上面顯示哪個(gè)字段的值,當(dāng)然是points里的point列
LabelRenderer label = new LabelRenderer("point");
// 圓角
label.setRoundedCorner(10, 10);
vis.setRendererFactory(new DefaultRendererFactory(label));
// 設(shè)置點(diǎn)的顏色
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());

// 把指令告訴可視化對(duì)象
vis.putAction("color", color);
vis.putAction("layout", layout);

// 生成Java GUI對(duì)象
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());

// 在一個(gè)JFrame上顯示出來
JFrame jf = new JFrame();
jf.setSize(800, 600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(display);
// 記得運(yùn)行畫圖指令
vis.run("color");
vis.run("layout");
// 最后設(shè)置為可見即可
jf.setVisible(true);
其他

這部分代碼畫畫流程圖肯定夠了,其他更高深的功能兄弟們自己探♂索吧。我用不上所以沒接著看下去……

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67788.html

相關(guān)文章

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

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

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

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

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

    摘要:為了一探究竟,于是開啟了這次應(yīng)用性能調(diào)優(yōu)之旅。使用即時(shí)編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結(jié)。在經(jīng)歷了調(diào)優(yōu)過程踩的很多坑之后,我們最終完善并實(shí)施了初步的性能測(cè)試方案,通過真實(shí)的測(cè)試數(shù)據(jù)歸納出了 Laravel 開發(fā)過程中的一些實(shí)踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應(yīng)用程序響應(yīng)有點(diǎn)慢、20幾個(gè)并...

    warkiz 評(píng)論0 收藏0
  • 一次Spring Batch完整入門實(shí)踐

    摘要:什么是作為的子項(xiàng)目,是一款基于的企業(yè)批處理框架。首先,運(yùn)行的基本單位是一個(gè),一個(gè)就做一件批處理的事情??偨Y(jié)為我們提供了非常實(shí)用的功能,對(duì)批處理場(chǎng)景進(jìn)行了完善的抽象,它不僅能實(shí)現(xiàn)小數(shù)據(jù)的遷移,也能應(yīng)對(duì)大企業(yè)的大數(shù)據(jù)實(shí)踐應(yīng)用。 前言 本文將從0到1講解一個(gè)Spring Batch是如何搭建并運(yùn)行起來的。本教程將講解從一個(gè)文本文件讀取數(shù)據(jù),然后寫入MySQL。 什么是 Spring Batc...

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

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

    seasonley 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<