2017-06-01 6 views
1

Bonjour je cherche dans la réponse Internet comment faire le graphique en JGraphT mais non orienté cela ne fonctionne pas, j'ai quelque chose comme ceci:JGrapT réglage graphique non orienté

g = new ListenableUndirectedGraph<String, MyEdge>(MyEdge.class); 
graphAdapter = new JGraphXAdapter<String, MyEdge>(g); 

g.addVertex("a"); 
g.addVertex("b"); 
g.addEdge("a","b"); 

layout = new mxOrganicLayout(graphAdapter); 
layout.execute(graphAdapter.getDefaultParent()); 

component = new mxGraphComponent(graphAdapter); 

component.setPreferredSize(new Dimension(dim.width - 50, dim.height - 200)); 

add(component); 

Bien qu'il soit défini comme non orienté il montre comme dirigé

+0

désolé juste pour comprendre ce que vous voulez accomplir et ce qui ne fonctionne pas? –

+0

Je veux montrer dans mon panneau graphique non orienté (bord sans flèche) –

+0

Existe-t-il une raison pour * ne * * pas considérer cela comme un doublon de https://stackoverflow.com/questions/26084742/undirected-graphs-in-jgraphx ? – Marco13

Répondre

1

J'ai fait quelques manipulations à votre code et cela devrait fonctionner.

La partie qui supprime les flèches suit une partie

// This part to remove arrow from edge 
mxUtils.setCellStyles(graphComponent.getGraph().getModel(), 
cells.toArray(), mxConstants.STYLE_ENDARROW, mxConstants.NONE); 

donc le code complet serait comme cela, et il est juste un exemple et le reste est laissé à votre fantaisie:

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 org.jgrapht.UndirectedGraph; 
import org.jgrapht.ext.JGraphXAdapter; 
import org.jgrapht.graph.DefaultEdge; 
import org.jgrapht.graph.SimpleGraph; 

import javax.swing.*; 
import java.awt.*; 
import java.util.Collection; 

public class UndirectedGraphClass extends JFrame { 

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

    private UndirectedGraphClass() { 

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

     g.addVertex("a"); 
     g.addVertex("b"); 
     g.addEdge("a", "b"); 

     jgxAdapter = new JGraphXAdapter<String, DefaultEdge>(g); 
     mxGraphComponent graphComponent = new mxGraphComponent(jgxAdapter); 
     mxGraphModel graphModel = (mxGraphModel) graphComponent.getGraph().getModel(); 
     Collection<Object> cells = graphModel.getCells().values(); 
     // This part to remove arrow from edge 
     mxUtils.setCellStyles(graphComponent.getGraph().getModel(), 
       cells.toArray(), mxConstants.STYLE_ENDARROW, mxConstants.NONE); 
     getContentPane().add(graphComponent); 

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

     this.setTitle(" some undirected graph "); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     this.setPreferredSize(new Dimension(400, 400)); 
     this.pack(); 
     this.setVisible(true); 
    } 
} 

La solution est inspirée de cette answer.

+1

merci ça marche :) –