1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//interface TreeElem{
//public String label();
//public TreeElem getLeft();
//public TreeElem getRight();
//}
public class TreeDraw extends JFrame {
private JPanel treedrawing;
TreeDraw (TreeDrawing td) {
Container pane;
setTitle ("Display Trees");
setSize (800,300);
pane = getContentPane ();
pane.setLayout(new GridLayout(1,1));
JPanel treedrawing = new JPanel();
treedrawing.setLayout(new GridLayout(1,1));
treedrawing.add(td);
pane.add(treedrawing);
setVisible(true);
}
public static void drawTree(TreeElem tree){
TreeDrawing td = new TreeDrawing(tree);
JFrame f = new TreeDraw(td);
}
}
class TreeDrawing extends Canvas{
TreeElem myTree;
static final int RADIUS = 10;
TreeDrawing(TreeElem tree){
myTree = tree;
}
public void paint(Graphics g){
drawSubtree(g,myTree,(int)(getWidth()/2),getWidth(),1);
}
public void drawSubtree(Graphics g,TreeElem tree, int x, int width,int level){
g.setColor(Color.black);
g.fillOval(x-RADIUS,(level*20)-RADIUS,RADIUS*2,RADIUS*2);
g.setColor(Color.gray);
int w = g.getFontMetrics().stringWidth(tree.label());
int h = g.getFontMetrics().getHeight();
g.drawString(tree.label(),x-(int)(w/2),(level*20)+(int)(h/4));
if (tree.getLeft()!=null){
g.drawLine(x-RADIUS,level*20,x-(int)(width/4),(level+1)*20);
drawSubtree(g,tree.getLeft(),x-(int)(width/4),(int)(width/2),level+1);
}
if (tree.getRight()!=null){
g.drawLine(x+RADIUS,level*20,x+(int)(width/4),(level+1)*20);
drawSubtree(g, tree.getRight(), x+(int)(width/4), (int)(width/2), level+1);
}
}
}
public class Test
{ static public void main(String[] args)
{ BinaryTree e = new BinaryTree("E");
BinaryTree g = new BinaryTree("G");
BinaryTree h = new BinaryTree("H");
BinaryTree i = new BinaryTree("I");
BinaryTree d = new BinaryTree("D",null,g);
BinaryTree f = new BinaryTree("F",h,i);
BinaryTree b = new BinaryTree("B",d,e);
BinaryTree c = new BinaryTree("C",f,null);
BinaryTree tree = new BinaryTree("A",b,c);
System.out.println("tree = " + tree);
//TreeDraw.drawTree(tree);
//c'est là que ça ne marche plus
}
} |