2014-04-04 4 views
0

Prefuse로 두 이미지와 선을 그려야합니다. 그러나 jframe을 만들 때 내 이미지가로드되지 않습니다. 라벨을 클릭하면 클릭 한 라벨 이미지가 나타납니다. 하지만 jframe을 만들 때 그 이미지가 나타나기를 바랍니다. 내가 어떻게 해. 여기 Prefuse jframe 생성시 이미지

여기
import java.awt.Font; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 

import prefuse.Constants; 
import prefuse.Display; 
import prefuse.Visualization; 
import prefuse.action.ActionList; 
import prefuse.action.assignment.ColorAction; 
import prefuse.action.assignment.DataSizeAction; 
import prefuse.action.assignment.FontAction; 
import prefuse.action.layout.graph.BalloonTreeLayout; 
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.ImageFactory; 
import prefuse.render.LabelRenderer; 
import prefuse.util.ColorLib; 
import prefuse.util.FontLib; 
import prefuse.visual.VisualItem; 

public class Example { 

public static void main(String[] argv) throws Exception { 

    Graph graph = null; 
    try { 

     graph = new GraphMLReader().readGraph("/socialnet.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.jpg"; 
    images[1] = "data/images/soup122.jpg"; 
    images[2] = "data/images/soup1.png"; 

    String[] names = new String[] {"Switch","soup1","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 

} 
}` 

내 XML 파일 내 코드

<?xml version="1.0" encoding="UTF-8"?> 
<!-- An excerpt of an egocentric social network --> 
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"> 
<graph edgedefault="undirected"> 

<!-- data schema --> 
<key id="name" for="node" attr.name="name" attr.type="string"/> 
<key id="type" for="node" attr.name="type" attr.type="string"/> 

<!-- nodes --> 
<node id="1"> 
<data key="name">Switch1</data> 
<data key="type">data/images/Switch.jpg</data> 
</node> 
<node id="2"> 
<data key="name">Switch2</data> 
<data key="type">data/images/soup1.png</data> 
</node> 
<edge source="1" target="2"></edge> 


</graph> 
</graphml> 
+0

약 내 수석 프로젝트 pls 도움 – cantas

+0

up up up up up 최대 – cantas

답변

1

즉 '아무튼 경우, 즉, JFrame의 생성 후

// 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 


vis.run("draw"); 
vis.run("layout"); 

을 그리기 작업을 실행 해보십시오 또는 t 작업, 호출 frame.repaint(). 당신은 어떻게 든 시각화의 드로잉을 강요 할 필요가 있습니다.

+0

제대로 작동하지는 않지만 거의 내 문제를 해결했습니다. – cantas