我做了功课,并在谷歌上搜索了一个示例和一个之前在 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("布局"); } }