2013-10-04 3 views
-1

Я использую Jung для рисования графика, а входы находятся в формате .net (построение его с помощью txt2pajek). Я хочу видеть веса по краям и на выходе. Пожалуйста, помогите мне, как это сделать? БлагодаряВес в графике с использованием Jung

Формат файла .net код и:

package pGraph; 
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Paint; 
import java.awt.Shape; 
import java.awt.geom.AffineTransform; 
import java.awt.geom.Ellipse2D; 
import java.io.IOException; 

import javax.swing.BorderFactory; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

import org.apache.commons.collections15.FactoryUtils; 
import org.apache.commons.collections15.Transformer; 
import org.apache.commons.collections15.functors.MapTransformer; 

import com.sun.xml.internal.ws.api.server.Container; 

import pGraph.JungExample2.MyRenderer; 

import edu.uci.ics.jung.algorithms.layout.FRLayout; 
import edu.uci.ics.jung.graph.DirectedSparseGraph; 
import edu.uci.ics.jung.graph.Graph; 
import edu.uci.ics.jung.io.PajekNetReader; 
import edu.uci.ics.jung.visualization.GraphZoomScrollPane; 
import edu.uci.ics.jung.visualization.VisualizationViewer; 
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse; 
import edu.uci.ics.jung.visualization.control.ModalGraphMouse; 
import edu.uci.ics.jung.visualization.decorators.EdgeShape; 
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller; 

/** 
* A class that shows the minimal work necessary to load and visualize a graph. 
*/ 
public class D1 
{ 

    public static void main(String[] args) throws IOException 
    { 
     JFrame jf = new JFrame(); 

     PajekNetReader pnr = new PajekNetReader(FactoryUtils.instantiateFactory(Object.class)); 
     Graph g = new DirectedSparseGraph(); 

     VisualizationViewer vv = new VisualizationViewer(new FRLayout(g)); 


     vv.getRenderContext().setVertexLabelTransformer(pnr.getVertexLabeller()); 

     vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller()); 


     pnr.load("F:\\1c\\qq.net", g);    


     DefaultModalGraphMouse gm = new DefaultModalGraphMouse(); 
     vv.setGraphMouse(gm);  


     System.out.println(g.toString()); 
     final DefaultModalGraphMouse<String, Number> graphMouse = new DefaultModalGraphMouse<String, Number>(); 
     graphMouse.setMode(ModalGraphMouse.Mode.PICKING); 
     vv.setGraphMouse(graphMouse); 

     final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv); 

     jf.getContentPane().add(vv) ; 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.pack(); 
     jf.setVisible(true); 
      } 
} 

* Vertices 5

1 "т"

2 "б"

3 "с"

4 "d"

5 "а"

* Дуги

1 2 0,2 ​​

3 4 0,9

5 4 0,86

ответ

0

PajekNetReader.getEdgeWeightTransformer() даст вам преимущество веса из файла Pajek.

Затем вам необходимо предоставить простой трансформатор, который может превратить ваш Transformer<E, Number> в Transformer<E, String> и передать его vv.getRenderContext().setEdgeLabelTransformer(). (Использование toStringLabeller не имеет особого смысла, так как краевые объекты не являются, сами, веса, которые вы хотите.)

http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/io/PajekNetReader.html

Смежные вопросы