如何绘制代表连接节点图的树?

我想在Java GUI中显示一棵树,但我不知道如何。 树代表连接节点的graphics,如下所示:

图片

我应该说,我有我自己的树类:

public class BinaryTree { private BinaryNode root; public BinaryTree( ) { root = null; } public BinaryTree( Object rootItem ) { root = new BinaryNode( rootItem, null, null ); } public BinaryTree( Object rootItem,BinaryNode a,BinaryNode b ) { root = new BinaryNode( rootItem, a, b ); } public int leavesCount(){ return BinaryNode.leavesCount(root); } public boolean equal(BinaryTree a,BinaryTree b){ return BinaryNode.equal(a.root, b.root); } public void printPreOrder( ) { if( root != null ) root.printPreOrder( ); } public void printInOrder( ) { if( root != null ) root.printInOrder( ); } public void printPostOrder( ) { if( root != null ) root.printPostOrder( ); } public void makeEmpty( ) { root = null; } public boolean isEmpty( ) { return root == null; } public void merge( Object rootItem, BinaryTree t1, BinaryTree t2 ) throws MergeAbrot { if( t1.root == t2.root && t1.root != null ) { throw new MergeAbrot("MergeAbrot"); } root=new BinaryNode( rootItem, t1.root, t2.root ); if( this != t1 ) t1.root = null; if( this != t2 ) t2.root = null; } public int size( ) { return BinaryNode.size( root ); } public int height( ) { return BinaryNode.height( root ); } } 

我只想绘制树。 我应该怎么做?

我能想到的最简单的方法是编写一个扩展JPanel并覆盖其paintComponent()方法的类。 在绘制方法中,您可以遍历树并绘制每个节点。 这里是一个简短的例子:

 import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class JPanelTest extends JPanel { @Override public void paintComponent(Graphics g) { // Draw Tree Here g.drawOval(5, 5, 25, 25); } public static void main(String[] args) { JFrame jFrame = new JFrame(); jFrame.add(new JPanelTest()); jFrame.setSize(500, 500); jFrame.setVisible(true); } } 

如果你不能在你的问题中发表你已经尝试过的东西,那么就去刺树。

你可能会考虑这些:

  • 这里引用的JHotDraw是一个用于创build自定义graphics编辑器的元库。

  • Prefuse可视化库 , 这里和这里说明。

  • 蜡染 ,实现SVG渲染。

  • JGraph 演示和用户手册 。

  • GraphStream ,如图所示。

  • JFreeChart XYBubbleRenderer

  • 在这里推荐一个JTree ,带有一个自定义的TreeIcon

  • 自定义渲染器 ,其中x基于树宽度的一小部分, y基于recursion级别。

  • 一个简单的graphics编辑器,如draw.GraphPanel ,如图所示。

我想说的是检查Abego的TreeLayout也是值得的 。 它本质上是一个树布局algorithm,所以它可以用于任何绘图机制,但它也包含一些在SVG和Swing中绘制graphics的演示/例子。

我想你只需要阅读关于JTree: http : //docs.oracle.com/javase/tutorial/uiswing/components/tree.html

也许还有一些关于Swing的一般信息