Вопрос по swing, java – Как нарисовать дерево, представляющее граф связанных узлов?

11

Я хочу отобразить дерево в графическом интерфейсе Java, но я не знаю как. Дерево представляет собой граф связанных узлов, например:

image

Я должен сказать, что у меня есть свой собственный класс дерева:

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

}
</code>

Я только хочу нарисовать дерево. Как мне быть?

Ваш Ответ

4   ответа
13

JHotDraw, cited here, a meta-library for creating custom graph editors.

Prefuse visualization library, illustrated here and here.

Batik, which implements SVG rendering.

JGraph demo and user manual.

GraphStream, illustrated here.

JFreeChart XYBubbleRenderer

A JTree, suggested here, with a custom TreeIcon.

A custom renderer, with x based on a fraction of tree breadth and y based on recursion level.

A simple graph editor such as draw.GraphPanel, illustrated here.

5

Самый простой способ, которым я могу придумать, это написать класс, который расширяет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);
    }

}

Сделайте попытку нарисовать дерево, если вы не можете понять это после того, что вы попробовали в своем вопросе.

4

Abego's TreeLayout тоже. По сути, это алгоритм компоновки дерева, так что его можно использовать с любым механизмом рисования, но он также содержит некоторые демонстрации / примеры рисования графиков в SVG и Swing.

1

http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

И, может быть, некоторая другая общая информация о Swing

Error: User Rate Limit Exceeded Oli
Error: User Rate Limit Exceeded

Похожие вопросы