Wie zeichnet man einen Baum, der ein Diagramm von verbundenen Knoten darstellt?

Ich möchte einen Baum in einer Java GUI anzeigen, weiß aber nicht wie. Der Baum stellt ein Diagramm der verbundenen Knoten dar:

Bild

Ich sollte sagen, dass ich meine eigene Baumklasse habe:

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

Ich möchte nur den Baum zeichnen. Wie soll ich es machen?

Solutions Collecting From Web of "Wie zeichnet man einen Baum, der ein Diagramm von verbundenen Knoten darstellt?"

Der einfachste Weg, an den ich denken kann, ist, eine class zu schreiben, die JPanel und ihre paintComponent() -Methode überschreibt. In der Paint-Methode können Sie durch den Baum iterieren und jeden Knoten malen. Hier ist ein kurzes Beispiel:

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

Versuchen Sie, den Baum zu malen, wenn Sie nicht wissen, was Sie in Ihrer Frage versucht haben.

Sie könnten alle folgenden Punkte berücksichtigen:

  • JHotDraw , hier zitiert, eine Meta-Bibliothek zum Erstellen von benutzerdefinierten Grafik-Editoren.

  • Prefuse Visualisierung Bibliothek , hier und hier dargestellt .

  • Batik , das SVG-Rendering implementiert.

  • JGraph Demo und Benutzerhandbuch .

  • GraphStream , hier abgebildet.

  • JFreeChart XYBubbleRenderer

  • Ein JTree , hier vorgeschlagen, mit einem benutzerdefinierten TreeIcon .

  • Ein benutzerdefinierter Renderer , wobei x auf einem Bruchteil der Baumbreite und y auf der Rekursionsebene basiert.

  • Ein einfacher draw.GraphPanel wie draw.GraphPanel , hier dargestellt .

Ich würde sagen, es lohnt sich, auch Abegos TreeLayout zu besuchen . Es ist im Wesentlichen ein Baum-Layout-Algorithmus, so dass es mit jedem Zeichnungsmechanismus verwendet werden kann, aber es enthält auch einige Demos / Beispiele zum Zeichnen von Graphen in SVG und Swing.

Ich denke, Sie müssen nur über JTree lesen: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

Und vielleicht noch ein paar allgemeine Informationen über Swing