J'écris mon tout premier programme en Java qui fait réellement l'interface utilisateur, alors s'il vous plaît, gardez-moi si la réponse à cette question est évidente. J'utilise le JGraph 5 (5.14) pour visualiser un graphe créé par JGrapht (0.8.3).Mise en forme d'un graphe JGraph en utilisant com.jgraph.layout - actualisation de l'affichage
Je peux créer le graphique avec JGrapht très bien, et je crois qu'il est converti en JGraph OK en utilisant org.jgrapht.ext.JGraphModelAdapter. Le problème est que lorsque le résultat est affiché dans une fenêtre (j'utilise un panneau dans un JApplet), tous les sommets sont affichés les uns sur les autres.
Quelqu'un d'autre a eu ce problème (JGraph Layout Does Not Work) et j'ai essayé la solution présentée ici, mais seulement deux nœuds sont affichés. Fondamentalement, je veux juste que le graphique affiché d'une certaine manière où les nœuds sont séparés les uns des autres.
Une partie du code vaut mille mots, voici donc ce que j'ai actuellement, qui affiche seulement deux noeuds (il y a 219 dans le graphique):
class ourGraphVisualizer extends JApplet
{
private static final Color DEFAULT_BG_COLOR = Color.decode("#FAFBFF");
private static final Dimension DEFAULT_SIZE = new Dimension(1280, 1024);
// this init overrides the JApplet.init(). Our class here extends JApplet so we can do the visualization
public void init(ListenableDirectedWeightedGraph<String, DefaultWeightedEdge> theGraph)
{
JGraphModelAdapter<String, DefaultWeightedEdge> jgAdapter;
JPanel panel = new JPanel();
panel.setPreferredSize(DEFAULT_SIZE);
JScrollPane scrollpane = new JScrollPane(panel);
scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.getContentPane().add(scrollpane, BorderLayout.CENTER);
JFrame frame = new JFrame();
frame.add(this);
frame.setTitle("Call Graph, " + theGraph.vertexSet().size() + "nodes");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setPreferredSize(DEFAULT_SIZE);
jgAdapter = new JGraphModelAdapter<String, DefaultWeightedEdge>(theGraph);
JGraph jgraph = new JGraph(jgAdapter);
panel.add(jgraph);
resize(DEFAULT_SIZE);
// Let's see if we can lay it out
JGraphFacade jgf = new JGraphFacade(jgraph);
JGraphFastOrganicLayout layoutifier = new JGraphFastOrganicLayout();
layoutifier.run(jgf);
System.out.println("Layout complete");
final Map nestedMap = jgf.createNestedMap(true, true);
jgraph.getGraphLayoutCache().edit(nestedMap);
jgraph.getGraphLayoutCache().update();
jgraph.refresh();
frame.setVisible(true);
panel.setVisible(true);
scrollpane.setVisible(true);
}
Toute suggestions constructives/help/l'inspiration sera très appréciée!
Merci ...
-Eric
Salut user1055696 ... Non, je ne l'ai jamais fait fonctionner, alors j'ai punted. En utilisant JGraphT, j'ai exporté le graphe dans GraphML et ensuite utilisé Perfuse pour lire le GraphML et le visualiser. C'était un peu difficile, mais ça a marché! – Eric