JGraphX中的无向图

时间:2014-09-28 12:12:50

标签: java jgrapht jgraphx

我尝试在JGraphx中显示图表。 只要我使用有向图,一切都很好, 但当我试图展示一个无向的,它显示 与方向。

代码来自jgrapht的演示。

package org.jgrapht.demo; import com.mxgraph.layout.*; import com.mxgraph.swing.*; import java.awt.*; import java.nio.file.FileSystem; import javax.swing.*; import org.jgrapht.*; import org.jgrapht.ext.*; import org.jgrapht.graph.*; /** * A demo applet that shows how to use JGraphX to visualize JGraphT graphs. * Applet based on JGraphAdapterDemo. * * @since July 9, 2013 */ public class JGraphXAdapterDemo extends JApplet { private static final long serialVersionUID = 2202072534703043194L; private static final Dimension DEFAULT_SIZE = new Dimension(530, 320); private JGraphXAdapter<String, DefaultEdge> jgxAdapter; /** * An alternative starting point for this demo, to also allow running this * applet as an application. * * @param args ignored. */ public static void main(String [] args) { JGraphAdapterDemo applet = new JGraphAdapterDemo(); applet.init(); JFrame frame = new JFrame(); frame.getContentPane().add(applet); frame.setTitle("JGraphT Adapter to JGraph Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } /** * {@inheritDoc} */ public void init() { // create a JGraphT graph ListenableUndirectedGraph<String, DefaultEdge> g = new ListenableUndirectedGraph<String, DefaultEdge>( DefaultEdge.class); // create a visualization using JGraph, via an adapter jgxAdapter = new JGraphXAdapter<String, DefaultEdge>(g); getContentPane().add(new mxGraphComponent(jgxAdapter)); resize(DEFAULT_SIZE); String v1 = "v1"; String v2 = "v2"; String v3 = "v3"; String v4 = "v4"; // add some sample data (graph manipulated via JGraphX) g.addVertex(v1); g.addVertex(v2); g.addVertex(v3); g.addVertex(v4); g.addEdge(v1, v2); g.addEdge(v2, v3); g.addEdge(v3, v1); g.addEdge(v4, v3); // positioning via jgraphx layouts mxCircleLayout layout = new mxCircleLayout(jgxAdapter); layout.execute(jgxAdapter.getDefaultParent()); // that's all there is to it!... } }

是否可以将其显示为无向?

由于

托本

PS:抱歉我的英文不好

2 个答案:

答案 0 :(得分:7)

您可以将mxGraphComponent中的边缘样式设置为NONE

mxGraphComponent graphComponent = new mxGraphComponent(jgxAdapter);
mxGraphModel graphModel  = (mxGraphModel)graphComponent.getGraph().getModel(); 
Collection<Object> cells =  graphModel.getCells().values(); 
mxUtils.setCellStyles(graphComponent.getGraph().getModel(), 
    cells.toArray(), mxConstants.STYLE_ENDARROW, mxConstants.NONE);
//instead of getContentPane().add(new mxGraphComponent(jgxAdapter));
getContentPane().add(graphComponent); 

答案 1 :(得分:1)

对于其他人有同样的问题,请查看此代码

import com.mxgraph.layout.mxCircleLayout;
import com.mxgraph.model.mxGraphModel;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxUtils;
import java.util.Collection;
import javax.swing.JFrame;

import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

public class GraphTest extends JFrame {

  public GraphTest(){

      JGraphXAdapter<String, DefaultEdge> jgxAdapter;
      UndirectedGraph<String, DefaultEdge> graph =
      new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);


    graph.addVertex("v1");
    graph.addVertex("v2");
    graph.addVertex("v3");
    graph.addVertex("v4");

    graph.addEdge("v1", "v2");
    graph.addEdge("v2","v3");
    graph.addEdge("v3", "v4");
    graph.addEdge("v4", "v1");


    jgxAdapter = new JGraphXAdapter <String, DefaultEdge>(graph);
    mxGraphComponent graphComponent = new mxGraphComponent(jgxAdapter);
    mxGraphModel graphModel  =       (mxGraphModel)graphComponent.getGraph().getModel(); 
    Collection<Object> cells =  graphModel.getCells().values(); 
    mxUtils.setCellStyles(graphComponent.getGraph().getModel(), 
    cells.toArray(), mxConstants.STYLE_ENDARROW, mxConstants.NONE);
    getContentPane().add(graphComponent);

    mxCircleLayout layout = new mxCircleLayout(jgxAdapter);
    layout.execute(jgxAdapter.getDefaultParent());

}
  public static void main(String[] args) {

     GraphTest g = new GraphTest();

          g.setTitle(" undirected graph ");
          g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          g.pack();
          g.setVisible(true);
  }

}