Я пишу свою самую первую программу на Java, которая на самом деле делает пользовательский интерфейс, поэтому, пожалуйста, потерпите меня, если ответ на этот вопрос очевиден.
Я использую JGraph 5 (5.14) для визуализации графика, созданного JGrapht (0.8.3).
Я могу создать график с JGrapht просто отлично, и я полагаю, что он будет преобразован в JGraph OK с помощью org.jgrapht.ext.JGraphModelAdapter. Проблема в том, что когда результат отображается в окне (я использую панель в JApplet), все вершины отображаются поверх других.
У кого-то еще была эта проблема (JGraph Layout Does Not Work), и я попробовал представленное решение есть, но тогда отображаются только два узла. По сути, я просто хочу, чтобы график отображался каким-то образом, где узлы отделены друг от друга.
Некоторый код стоит тысячи слов, поэтому вот то, что у меня сейчас есть, которое отображает только два узла (на графике их 219):
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);
}
Будем очень признательны за любые конструктивные предложения/помощь/вдохновение!
Спасибо...
-Эрик