Comment dessiner un arbre représentant un graphe de nœuds connectés?

je veux afficher un arbre dans une interface graphique Java, mais je ne sais pas comment. L'arbre représente un graphique de noeuds connectés, comme ceci:

image

je dois dire que j'ai ma propre classe d'arbre:

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

}

je veux seulement dessiner l'arbre. Comment dois-je faire?

10
demandé sur Community 2012-04-12 19:23:49

4 réponses

la façon la plus simple à laquelle je peux penser est d'écrire une classe qui s'étend JPanel et outrepasse sa méthode paintComponent() . Dans la méthode paint, vous pouvez itérer à travers l'arbre et peindre chaque noeud. Voici un bref exemple:

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

}

essayez de peindre l'arbre, si vous ne pouvez pas le comprendre postez ce que vous avez essayé dans votre question.

5
répondu jpalm 2012-04-12 18:07:11

vous pourriez considérer n'importe lequel de ceux-ci:

13
répondu trashgod 2017-11-12 18:19:53

je dirais qu'il vaut la peine de vérifier Abego de TreeLayout . Il s'agit essentiellement d'un algorithme de disposition d'arbre de sorte qu'il peut être utilisé avec n'importe quel mécanisme de dessin, mais il contient également quelques démos/exemples de graphiques de dessin dans SVG et Swing.

4
répondu Joost 2016-05-18 11:31:00

je suppose que vous avez juste besoin de lire à propos de JTree: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

Et peut-être quelques autres informations générales à propos de Swing

1
répondu Mikle Garin 2012-04-12 15:27:01