2012-04-12 2 views
9

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

image

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

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

} 

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

ответ

6

Самый простой способ, которым я могу думать о том, чтобы написать класс, который расширяет JPanel и переопределить его paintComponent() способ. В методе paint вы можете выполнять итерацию по дереву и рисовать каждый узел. Вот небольшой пример:

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

} 

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

1

Я думаю, вам просто нужно прочитать о JTree: http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

и, возможно, некоторые другие общие сведения о свинг

+0

sry, но я хочу показать дерево что-то вроде этой ссылки: lcm.csa.iisc.ernet.in/dsa/img151.gif – Oli

+0

Не уверен, что для создания таких визуальных деревьев есть бесплатные библиотеки. Вы всегда можете сделать это самостоятельно, используя основные графические инструменты. –

13

Вы могли бы рассмотреть любого из них:

  • JHotDraw упоминавшегося here, мета-библиотека для создания пользовательского графа редакторов.

  • Prefuse визуализация library, изображенный here и here.

  • Batik, который реализует визуализацию SVG.

  • JGraphdemo и user manual.

  • GraphStream, изображенный here.

  • JFreeChartXYBubbleRenderer

  • JTree предложил here с обычаем TreeIcon.

  • custom renderer с х на основе доли дерева широты и у на основе уровня рекурсии.

  • Простой редактор графов, такой как draw.GraphPanel, иллюстрированный here.

4

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

Смежные вопросы