Java 如何自定义预使用中的渲染。使用前布局中自定义图像时出现问题
大家好 我已经编写了一个java应用程序来以不同的布局显示图像。我能够正确地显示不同的布局,但有时图像会重叠。在我的应用程序中,有超过20/30个节点和一对具有6到10条边的节点。图像大小为50*50。由于有10条边,节点将重叠,即图像将重叠在另一个图像上。我怎样才能解决这个问题 我们将非常感谢您的帮助 我的代码如下Java 如何自定义预使用中的渲染。使用前布局中自定义图像时出现问题,java,visualization,prefuse,Java,Visualization,Prefuse,大家好 我已经编写了一个java应用程序来以不同的布局显示图像。我能够正确地显示不同的布局,但有时图像会重叠。在我的应用程序中,有超过20/30个节点和一对具有6到10条边的节点。图像大小为50*50。由于有10条边,节点将重叠,即图像将重叠在另一个图像上。我怎样才能解决这个问题 我们将非常感谢您的帮助 我的代码如下 导入javax.swing.JFrame; 导入java.awt.image.buffereImage; 导入javax.imageio.imageio; 导入java.util
导入javax.swing.JFrame;
导入java.awt.image.buffereImage;
导入javax.imageio.imageio;
导入java.util。;
导入java.io。;
导入java.awt.Font
导入prefuse.Constants;
导入prefuse.Display;
导入使用前可视化;
导入prefuse.action.ActionList;
导入prefuse.action.repaitaction;
导入prefuse.action.assignment.ColorAction;
导入prefuse.action.assignment.FontAction;
导入prefuse.action.assignment.DataColorAction;
导入prefuse.action.layout.graph.ForceDirectedLayout;
导入prefuse.action.layout.graph。;
导入prefuse.action.layout。;
导入prefuse.activity.activity;
导入prefuse.controls.DragControl;
导入prefuse.controls.PanControl;
导入prefuse.controls.ZoomControl;
导入prefuse.data.Graph;
导入prefuse.data.io.DataIOException;
导入prefuse.data.io.GraphMLReader;
导入prefuse.render.DefaultRenderFactory;
导入prefuse.render.LabelRenderer;
导入prefuse.util.ColorLib;
导入prefuse.visual.VisualItem;
导入prefuse.visual.*;
导入prefuse.util.FontLib;
导入prefuse.action.assignment.DataSizeAction
导入prefuse.data.*;
导入prefuse.render.ImageFactory
公共类布局示例{
publicstaticvoidmain(字符串[]argv)引发异常{
图=空;
试一试{
graph=newgraphmlreader().readGraph(“/graphs.xml”);
}捕获(DataIOE异常){
e、 printStackTrace();
System.err.println(“错误加载图形。正在退出…”);
系统出口(1);
}
ImageFactory ImageFactory=新ImageFactory(100100);
尝试
{
//加载图像并构建imageFactory。
字符串图像[]=新字符串[3];
images[0]=“data/images/switch.png”;
images[1]=“data/images/ip_network.png”;
images[2]=“data/images/router.png”;
字符串[]名称=新字符串[]{“交换机”、“网络”、“路由器”};
BuffereImage img=null;
对于(int i=0;i
}
谢谢
拉维库马尔
import javax.swing.JFrame;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.;
import java.io.;
import java.awt.Font;
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.FontAction;
import prefuse.action.assignment.DataColorAction;
import prefuse.action.layout.graph.ForceDirectedLayout;
import prefuse.action.layout.graph.;
import prefuse.action.layout.;
import prefuse.activity.Activity;
import prefuse.controls.DragControl;
import prefuse.controls.PanControl;
import prefuse.controls.ZoomControl;
import prefuse.data.Graph;
import prefuse.data.io.DataIOException;
import prefuse.data.io.GraphMLReader;
import prefuse.render.DefaultRendererFactory;
import prefuse.render.LabelRenderer;
import prefuse.util.ColorLib;
import prefuse.visual.VisualItem;
import prefuse.visual.*;
import prefuse.util.FontLib;
import prefuse.action.assignment.DataSizeAction;
import prefuse.data.*;
import prefuse.render.ImageFactory;
public class LayoutExample {
public static void main(String[] argv) throws Exception {
Graph graph = null;
try {
graph = new GraphMLReader().readGraph("/graphs.xml");
} catch ( DataIOException e ) {
e.printStackTrace();
System.err.println("Error loading graph. Exiting...");
System.exit(1);
}
ImageFactory imageFactory = new ImageFactory(100,100);
try
{
//load images and construct imageFactory.
String images[] = new String[3];
images[0] = "data/images/switch.png";
images[1] = "data/images/ip_network.png";
images[2] = "data/images/router.png";
String[] names = new String[] {"Switch","Network","Router"};
BufferedImage img = null;
for(int i=0; i < images.length ; i++)
{
try {
img = ImageIO.read(new File(images[i]));
imageFactory.addImage(names[i],img);
}
catch (IOException e){
}
}
}
catch(Exception exp)
{
}
Visualization vis = new Visualization();
vis.add("graph", graph);
LabelRenderer nodeRenderer = new LabelRenderer("name", "type");
nodeRenderer.setVerticalAlignment(Constants.BOTTOM);
nodeRenderer.setHorizontalPadding(0);
nodeRenderer.setVerticalPadding(0);
nodeRenderer.setImagePosition(Constants.TOP);
nodeRenderer.setMaxImageDimensions(100,100);
DefaultRendererFactory drf = new DefaultRendererFactory();
drf.setDefaultRenderer(nodeRenderer);
vis.setRendererFactory(drf);
ColorAction nText = new ColorAction("graph.nodes", VisualItem.TEXTCOLOR);
nText.setDefaultColor(ColorLib.gray(100));
ColorAction nEdges = new ColorAction("graph.edges", VisualItem.STROKECOLOR);
nEdges.setDefaultColor(ColorLib.gray(100));
// bundle the color actions
ActionList draw = new ActionList();
//MAD - changing the size of the nodes dependent on the weight of the people
final DataSizeAction dsa = new DataSizeAction("graph.nodes","size");
draw.add(dsa);
draw.add(nText);
draw.add(new FontAction("graph.nodes", FontLib.getFont("Tahoma",Font.BOLD, 12)));
draw.add(nEdges);
vis.putAction("draw", draw);
ActionList layout = new ActionList(Activity.DEFAULT_STEP_TIME);
BalloonTreeLayout balloonlayout = new BalloonTreeLayout("graph",50);
layout.add(balloonlayout);
Display d = new Display(vis);
vis.putAction("layout", layout);
// start up the animated layout
vis.run("draw");
vis.run("layout");
d.addControlListener(new DragControl());
// pan with left-click drag on background
d.addControlListener(new PanControl());
// zoom with right-click drag
d.addControlListener(new ZoomControl());
// -- 6. launch the visualization -------------------------------------
// create a new window to hold the visualization
JFrame frame = new JFrame("prefuse example");
// ensure application exits when window is closed
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(d);
frame.pack(); // layout components in window
frame.setVisible(true); // show the window
}