我想在Java GUI中显示一个树,但我不知道如何。树表示连接节点的图形,如下所示:
我应该说我有自己的树类:
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 );
}
}
我只想画树。我该怎么办?
答案 0 :(得分:13)
您可以考虑以下任何一项:
Batik,它实现了SVG渲染。
GraphStream,图示为here。
一个custom renderer, x 基于树宽度的一小部分, y 基于递归级别。
一个简单的图形编辑器,例如draw.GraphPanel
,图示为here。
答案 1 :(得分:7)
我能想到的最简单的方法是编写一个扩展JPanel
并覆盖其paintComponent()
方法的类。在paint方法中,您可以遍历树并绘制每个节点。这是一个简短的例子:
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);
}
}
如果你无法弄清楚你在问题中尝试过的东西,那就试着画树。
答案 2 :(得分:4)
我认为值得查看Abego's TreeLayout。它本质上是一种树形布局算法,因此它可以与任何绘图机制一起使用,但它也包含SVG和Swing中绘制图形的一些演示/示例。
答案 3 :(得分:1)
我想你只需阅读有关JTree的内容: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html
也许还有其他一些关于Swing的一般信息