我做了功课,并在谷歌上搜索了一个示例和一个之前在 stackoverflow 上回答的主题。但是什么也没找到。
我的问题是没有像箭头一样的视图的普通边缘。
这是我希望从目标到目的地的前进箭头所做的事情:
LabelRenderer nameLabel = new LabelRenderer("name");
nameLabel.setRoundedCorner(8, 8);
DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel);
边缘渲染器边缘渲染器;
edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE, prefuse.Constants.EDGE_ARROW_FORWARD);
rendererFactory.setDefaultEdgeRenderer(edgeRenderer);
vis.setRendererFactory(rendererFactory);
这是我看到的边缘颜色,希望这些不能是透明的:
int[] 调色板 = new int[]{ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)};
DataColorAction fill = new DataColorAction("socialnet.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette);
ColorAction text = new ColorAction("socialnet.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0));
ColorAction 边缘 = new ColorAction("socialnet.edges", VisualItem.STROKECOLOR, ColorLib.gray(200));
ColorAction 箭头 = new ColorAction("socialnet.edges", VisualItem.FILLCOLOR, ColorLib.gray(200));
动作列表颜色 = 新动作列表();
color.add(填充);
color.add(文本);
colour.add(边缘);
color.add(箭头);
vis.putAction("color", colour);
因此,我想知道我错在哪里?为什么我的边缘看起来不像箭头?
感谢您的任何想法。
有关更多详细信息,我想粘贴所有代码:
/*
* 要更改此模板,请选择工具 | 模板
* 并在编辑器中打开模板。
*/
包prefusedeneme;
导入 javax.swing.JFrame;
导入 prefuse.data.*;
导入 prefuse.data.io.*;
导入prefuse.Display;
导入prefuse.Visualization;
导入 prefuse.render.*;
导入 prefuse.util.*;
导入 prefuse.action.assignment.*;
导入prefuse.Constants;
导入 prefuse.visual.*;
导入 prefuse.action.*;
导入 prefuse.activity.*;
导入 prefuse.action.layout.graph.*;
导入 prefuse.controls.*;
导入 prefuse.data.expression.Predicate;
导入 prefuse.data.expression.parser.ExpressionParser;
公共类 SocialNetworkVis {
公共静态无效主要(字符串argv []){
// 1. 加载数据
图图=空;
/* 图表将包含核心数据 */
尝试 {
graph = new GraphMLReader().readGraph("socialnet.xml");
/* 从 XML 文件中加载数据 */
} 捕捉(DataIOException e){
e.printStackTrace();
System.err.println("加载图表时出错。退出...");
System.exit(1);
}
// 2. 准备可视化
可视化 vis = new Visualization();
/* vis 是运行可视化的主要对象 */
vis.add("socialnet", graph);
/* 将我们的数据添加到可视化中 */
// 3. 设置渲染器和渲染工厂
// 名称标签
LabelRenderer nameLabel = new LabelRenderer("name");
nameLabel.setRoundedCorner(8, 8);
/* nameLabel 描述如何绘制标记为“name”的数据元素 */
// 创建渲染工厂
DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel);
边缘渲染器边缘渲染器;
edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE, prefuse.Constants.EDGE_ARROW_FORWARD);
rendererFactory.setDefaultEdgeRenderer(edgeRenderer);
vis.setRendererFactory(rendererFactory);
// 4. 处理动作
// 标称数据类型的调色板
int[] 调色板 = new int[]{ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)};
/* ColorLib.rgb 将颜色值转换为整数 */
// 将数据映射到调色板中的颜色
DataColorAction fill = new DataColorAction("socialnet.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette);
/* fill 描述了根据部分数据绘制图形的颜色 */
// 节点文本
ColorAction text = new ColorAction("socialnet.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0));
/* text 描述了绘制文本的颜色 */
// 边缘
ColorAction 边缘 = new ColorAction("socialnet.edges", VisualItem.STROKECOLOR, ColorLib.gray(200));
ColorAction 箭头 = new ColorAction("socialnet.edges", VisualItem.FILLCOLOR, ColorLib.gray(200));
/* edge 描述绘制边缘的颜色 */
// 将颜色分配组合成一个动作列表
动作列表颜色 = 新动作列表();
color.add(填充);
color.add(文本);
colour.add(边缘);
color.add(箭头);
vis.putAction("color", colour);
/* 将颜色动作添加到可视化 */
// 为布局创建一个单独的动作列表
ActionList 布局 = new ActionList(Activity.INFINITY);
layout.add(new ForceDirectedLayout("socialnet"));
/* 使用带有默认参数的强制导向图布局 */
layout.add(new RepaintAction());
/* 每次移动图节点后重新绘制 */
vis.putAction("布局", 布局);
/* 将 laout 动作添加到可视化中 */
// 5. 为可视化添加交互控件
显示显示 = 新显示(可见);
display.setSize(700, 700);
display.pan(350, 350); //平移到中间
display.addControlListener(new DragControl());
/* 允许拖动项目 */
display.addControlListener(new PanControl());
/* 允许平移显示(左/右,上/下)(左拖动)*/
display.addControlListener(new ZoomControl());
/* 允许缩放显示(右拖动)*/
// 6. 在 JFrame 中启动可视化工具
JFrame frame = new JFrame("prefuse tutorial: socialnet");
/* 框架是主窗口 */
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。添加(显示);
/* 将显示(包含可视化)添加到窗口 */
框架.pack();
frame.setVisible(true);
/* 开始可视化工作 */
vis.run("颜色");
vis.run("布局");
}
}