Come disegnare un albero che rappresenta un grafico di nodes connessi?

Voglio visualizzare un albero in una GUI Java, ma non so come. L’albero rappresenta un grafico di nodes connessi, come questo:

Immagine

Devo dire che ho la mia class di alberi:

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

Voglio solo disegnare l’albero. Come dovrei fare?

Il modo più semplice a cui posso pensare è scrivere una class che estenda JPanel e sovrascriva il suo metodo paintComponent() . Nel metodo paint puoi scorrere l’albero e dipingere ogni nodo. Ecco un breve esempio:

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

Prendi una pugnalata a dipingere l’albero, se non riesci a capire come pubblicare ciò che hai provato nella tua domanda.

Potresti prendere in considerazione uno di questi:

  • JHotDraw , citato qui , una meta-libreria per la creazione di editor grafici personalizzati.

  • Libreria di visualizzazione prefusa , illustrata qui e qui .

  • Batik , che implementa il rendering SVG.

  • Demo di JGraph e manuale dell’utente .

  • GraphStream , illustrato qui .

  • JFreeChart XYBubbleRenderer

  • Un JTree , suggerito qui , con un TreeIcon personalizzato.

  • Un renderizzatore personalizzato , con x basato su una frazione di larghezza d’albero e y basato sul livello di ricorsione.

  • Un semplice editor grafico come draw.GraphPanel , illustrato qui .

Direi che vale la pena dare un’occhiata anche a TreeLayout di Abego . È essenzialmente un algoritmo di layout dell’albero in modo che possa essere utilizzato con qualsiasi meccanismo di disegno, ma contiene anche alcune dimostrazioni / esempi di grafici di disegno in SVG e Swing.

Suppongo che tu abbia solo bisogno di leggere su JTree: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

E forse qualche altra informazione generale su Swing