gpt4 book ai didi

java - 使用 com.jgraph.layout 格式化 JGraph 图形 - 刷新显示

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:37 25 4
gpt4 key购买 nike

我正在用 Java 编写第一个真正执行 UI 的程序,所以如果答案很明显,请耐心等待。

我正在使用 JGraph 5 (5.14) 来可视化由 JGrapht (0.8.3) 创建的图形。

我可以使用 JGrapht 很好地创建图形,并且我相信它可以使用 org.jgrapht.ext.JGraphModelAdapter 转换为 JGraph。问题是,当结果显示在窗口中时(我在 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);
}

任何建设性的建议/帮助/灵感将不胜感激!

谢谢...

-埃里克

最佳答案

如果你想避免顶点重叠,只需尝试不同的图形布局,我在这里给出了一些用于分层布局的布局,并调用该布局的运行方法

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);

关于java - 使用 com.jgraph.layout 格式化 JGraph 图形 - 刷新显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com