国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

記一次prefuse應用實踐(數據讀入部分詳細說明)

curried / 2050人閱讀

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

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

1、如何獲取與使用

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

2、數據讀入

介紹三種方式:

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

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

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

2.1 xml數據讀入

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

2.2 直接輸入讀入

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

先讀入點:

HashMap nodesRow = new HashMap();

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

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

// 然后存入點的數據
for (int i = 0; i < points.length; i++) {
    // 很奇葩,需要先創建一個空行,然后返回行號
    int rid = nodes.addRow();
    // 然后根據行號和列名設置對應數值
    nodes.set(rid, "point", points[i]);
    // 記得把行號記下來,因為prefuse的邊是用行號來唯一指定節點的,也很奇葩
    nodesRow.put(points[i], rid);
}

// 同理,創建邊的表
Schema e_sch = new Schema();
e_sch.addColumn("from", int.class);
e_sch.addColumn("to", int.class);
Table arrows = e_sch.instantiate();

// 然后存入邊的數據
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了大神博客里的代碼,修改了一些,看看就好。

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

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

// 設置點上面顯示哪個字段的值,當然是points里的point列
LabelRenderer label = new LabelRenderer("point");
// 圓角
label.setRoundedCorner(10, 10);
vis.setRendererFactory(new DefaultRendererFactory(label));
// 設置點的顏色
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);
// 設置邊的顏色
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");
// 最后設置為可見即可
jf.setVisible(true);
其他

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67788.html

相關文章

  • 一次基于vue的spa多頁簽實踐經驗

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

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

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

    張遷 評論0 收藏0
  • 一次 Laravel 應用性能調優經歷

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

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

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

    Baaaan 評論0 收藏0
  • 一次翻譯站經歷

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

    seasonley 評論0 收藏0

發表評論

0條評論

curried

|高級講師

TA的文章

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