Prefuse学习(二)从数据库中读取数据
2010-07-06 13:24
387 查看
prefuse是一个非常不错的开源可视化项目,尤其是用在social network/complex network上,个人感觉要比jung好。不过可惜的是,prefuse的user manual还在建设中,并且google resource也少得可怜。好在开源提供了源码,只好看源码了,呵呵。
prefuse user manual上提供了一个简单的例子,这个例子的数据来自一个符合GraphML标准的xml文件(socialnet.xml),大致内容如下:
xml 代码
下载地址:http://vdisk.weibo.com/s/bVYuL http://pan.baidu.com/s/1JIGZ 这里也收藏了一些应用下载地址:http://pan.baidu.com/s/1EFsKn 针对下面很多评论提到了是否支持中文因为上面采用的是MySQL可能在 显示的时候中文会乱码,需要在连接的url上加上字符集 utf-8我后来在SQL2005上测试 中文也可以显示。附图片:
prefuse user manual上提供了一个简单的例子,这个例子的数据来自一个符合GraphML标准的xml文件(socialnet.xml),大致内容如下:
xml 代码
-- phpMyAdmin SQL Dump -- version 2.11.10 -- http://www.phpmyadmin.net -- -- 主机: localhost -- 生成日期: 2010 年 07 月 06 日 03:24 -- 服务器版本: 5.0.22 -- PHP 版本: 5.2.13 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- 数据库: `test` -- -- -------------------------------------------------------- -- -- 表的结构 `node` -- CREATE TABLE IF NOT EXISTS `node` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(45) NOT NULL, `gender` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; -- -- 导出表中的数据 `node` -- INSERT INTO `node` (`id`, `name`, `gender`) VALUES (1, 'cuiran', 'boy'), (2, 'aojuan', 'girl'), (3, 'zhangsan', 'boy'), (4, 'lisi', 'girl'), (5, 'aomiao', 'girl'), (6, 'aoqian', 'girl'), (7, 'wangwu', 'boy');
package com.cayden.prefuse; import javax.swing.JFrame; import prefuse.Constants; import prefuse.Display; import prefuse.Visualization; import prefuse.action.ActionList; import prefuse.action.RepaintAction; import prefuse.action.assignment.ColorAction; import prefuse.action.assignment.DataColorAction; import prefuse.action.layout.graph.ForceDirectedLayout; import prefuse.activity.Activity; import prefuse.controls.DragControl; import prefuse.controls.NeighborHighlightControl; import prefuse.controls.PanControl; import prefuse.controls.ZoomControl; import prefuse.data.Graph; import prefuse.data.Table; import prefuse.data.io.sql.ConnectionFactory; import prefuse.data.io.sql.DatabaseDataSource; import prefuse.render.DefaultRendererFactory; import prefuse.render.LabelRenderer; import prefuse.util.ColorLib; import prefuse.visual.VisualItem; public class TestMySql { public static final String driverName = "com.mysql.jdbc.Driver"; public static final String dbURL = "jdbc:mysql://localhost:3306/test"; public static final String userName = "root"; public static final String userPwd = "root"; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub DatabaseDataSource datasrc = null; try { //get database connection datasrc = ConnectionFactory.getDatabaseConnection( driverName, dbURL, userName, userPwd); //create a table of data Table nodes = datasrc.getData("select * from node"); Table edges = datasrc.getData("select * from edge"); Graph graph = new Graph(nodes, edges, false, "id", "sid", "tid"); Visualization vis = new Visualization(); vis.add("graph", graph); LabelRenderer r = new LabelRenderer("name"); r.setRoundedCorner(8, 8); vis.setRendererFactory(new DefaultRendererFactory(r)); int[] palette = new int[] { ColorLib.rgb(255,180,180), ColorLib.rgb(190,190,255) }; DataColorAction fill = new DataColorAction("graph.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette); ColorAction textColor = new ColorAction("graph.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0)); ColorAction edgesColor = new ColorAction("graph.edges", VisualItem.STROKECOLOR, ColorLib.gray(200)); ActionList color = new ActionList(); color.add(fill); color.add(textColor); color.add(edgesColor); ActionList layout = new ActionList(Activity.INFINITY); layout.add(new ForceDirectedLayout("graph")); layout.add(new RepaintAction()); vis.putAction("color", color); vis.putAction("layout", layout); Display d = new Display(vis); d.setSize(720, 500); d.addControlListener(new DragControl()); d.addControlListener(new PanControl()); d.addControlListener(new ZoomControl()); d.addControlListener(new NeighborHighlightControl()); JFrame frame = new JFrame("Prefuse"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 600); frame.add(d); frame.setVisible(true); vis.run("color"); vis.run("layout"); } catch (Exception e) { e.printStackTrace(); } } }运行后效果图:
下载地址:http://vdisk.weibo.com/s/bVYuL http://pan.baidu.com/s/1JIGZ 这里也收藏了一些应用下载地址:http://pan.baidu.com/s/1EFsKn 针对下面很多评论提到了是否支持中文因为上面采用的是MySQL可能在 显示的时候中文会乱码,需要在连接的url上加上字符集 utf-8我后来在SQL2005上测试 中文也可以显示。附图片:
相关文章推荐
- Prefuse学习(二)从数据库中读取数据
- Prefuse学习(三)从数据库中读取数据并SWT显示
- Prefuse学习(三)从数据库中读取数据并SWT显示
- 今天学习了怎么读取Android数据库读取数据,用ListView将其显示出来
- R语言学习-读取数据库数据-MYSQL
- Prefuse 从数据库中读取数据
- VC6 下学习使用Teechart8记录 三 数据库读取与鼠标选取数据
- 2009-03-16技术学习:Wicket框架下从数据库读取数据
- poi 学习之使用 Apche poi 读取数据库中的数据并写入Excel
- [学习笔记]二进制数据的处理(1) 普通二进制数据处理 B -------读取数据库中二进制数据
- [DNN学习所得]CBO——简化从数据库读取数据并实例化对象的有效方法
- php中,从数据库中读取数据后,出现乱码的情况及解决方法
- 数据库系列学习(三)-数据的增、删、改
- (转)ASP.NET 2.0 从数据库中读取数据生成分层的结构化TreeView
- php读取txt文件并将数据插入到数据库
- 【JAVA秒会技术之搞定BLOB数据类型】如何读取及展示数据库中BLOB类型的图片
- 数据库连接函数并读取TXT文本中的数据
- 使用Apache POI创建Excel,并从数据库中读取数据写入到Excel文件中
- 从数据库中读取序列化数据
- Ruby学习笔记(二)——从管道读取数据