java – 在JPanel上绘制SimpleWeightedGraph
发布时间:2020-12-14 23:31:49 所属栏目:Java 来源:网络整理
导读:我有一个SimpleWeightedGraph,我想在JFrame中的JPanel上绘制它. 不幸的是没有画出来. 我读了this article.他们正在使用ListenableDirectedGraph,所以我尝试了一个ListenableUndirectedGraph但没有成功. public class DisplayGraphForm extends javax.swing.J
我有一个SimpleWeightedGraph,我想在JFrame中的JPanel上绘制它.
不幸的是没有画出来. 我读了this article.他们正在使用ListenableDirectedGraph,所以我尝试了一个ListenableUndirectedGraph但没有成功. public class DisplayGraphForm extends javax.swing.JFrame { public DisplayGraphForm(SimpleWeightedGraph g) { initComponents(); // graphPanel added to JFrame with BorderLayout (Center) JGraphModelAdapter adapter = new JGraphModelAdapter(g); JGraph jgraph = new JGraph(adapter); graphPanel.add(jgraph); } } 解决方法
看起来你要从你的问题中留下一些重要的细节,如果没有
Minimal,Complete,and Verifiable example,很难说问题出在哪里.
但请注意,您尝试采用的样本非常陈旧. JGraph已经转向JGraphX.请考虑以下示例,该示例演示了使用JGraphXAdapter的JGraphT和JGraphX的链接. import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jgrapht.ListenableGraph; import org.jgrapht.ext.JGraphXAdapter; import org.jgrapht.graph.DefaultWeightedEdge; import org.jgrapht.graph.ListenableDirectedWeightedGraph; import com.mxgraph.layout.mxCircleLayout; import com.mxgraph.layout.mxIGraphLayout; import com.mxgraph.swing.mxGraphComponent; public class DemoWeightedGraph { private static void createAndShowGui() { JFrame frame = new JFrame("DemoGraph"); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); ListenableGraph<String,MyEdge> g = buildGraph(); JGraphXAdapter<String,MyEdge> graphAdapter = new JGraphXAdapter<String,MyEdge>(g); mxIGraphLayout layout = new mxCircleLayout(graphAdapter); layout.execute(graphAdapter.getDefaultParent()); frame.add(new mxGraphComponent(graphAdapter)); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } public static class MyEdge extends DefaultWeightedEdge { @Override public String toString() { return String.valueOf(getWeight()); } } public static ListenableGraph<String,MyEdge> buildGraph() { ListenableDirectedWeightedGraph<String,MyEdge> g = new ListenableDirectedWeightedGraph<String,MyEdge>(MyEdge.class); String x1 = "x1"; String x2 = "x2"; String x3 = "x3"; g.addVertex(x1); g.addVertex(x2); g.addVertex(x3); MyEdge e = g.addEdge(x1,x2); g.setEdgeWeight(e,1); e = g.addEdge(x2,x3); g.setEdgeWeight(e,2); e = g.addEdge(x3,x1); g.setEdgeWeight(e,3); return g; } } 请注意,MyEdge扩展了DefaultWeightedEdge以提供显示边缘权重的自定义toString().一个更干净的解决方案可能是覆盖mxGraph.convertValueToString,检查单元格的内容并根据需要提供自定义标签. toString是演示的快捷方式,我也注意到DefaultWeightedEdge.getWeight()受到保护,所以无论如何都需要扩展:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |