Ich möchte einen Baum in einer Java GUI anzeigen, weiß aber nicht wie. Der Baum stellt ein Diagramm der verbundenen Knoten dar:
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?
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