1

私は実際にUIを実行するJavaで最初のプログラムを書いているので、これに対する答えが明らかな場合はご容赦ください。

JGraph 5(5.14)を使用して、JGrapht(0.8.3)によって作成されたグラフを視覚化します。

JGraphtでグラフをうまく作成でき、org.jgrapht.ext.JGraphModelAdapterを使用してJGraphOKに変換されると思います。問題は、結果がウィンドウに表示されると(JAppletのパネルを使用している場合)、すべての頂点が別の頂点の上に表示されることです。

他の誰かがこの問題を抱えていて(JGraphレイアウトが機能しない)、そこで提示された解決策を試しましたが、2つのノードしか表示されません。基本的には、ノードが互いに分離している方法でグラフを表示したいだけです。

いくつかのコードは千の言葉に値するので、これが私が現在持っているもので、2つのノードしか表示しません(グラフには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);
}

建設的な提案/ヘルプ/インスピレーションは大歓迎です!

ありがとう...

-エリック

4

2 に答える 2

2

頂点の重複を避けたい場合は、別のグラフ レイアウトを試してください

final  JGraphHierarchicalLayout hir = new JGraphHierarchicalLayout();
final JGraphFacade graphFacade = new JGraphFacade(jgraph);      
hir.run(graphFacade);
        final Map nestedMap = graphFacade.createNestedMap(true, true);
        jgraph.getGraphLayoutCache().edit(nestedMap);
于 2013-03-13T06:00:11.273 に答える
-1

適切なレイアウト マネージャーを使用して、2 つの JPanel を作成し、グラフを個別に JPanel に追加し、JPanels を JFrame に追加することをお勧めします。

于 2012-06-21T12:37:53.650 に答える