import java.awt.*;import java.awt.event.*;import java.util.*;public class PegGraphics extends Panel implements ActionListener, MouseListener {  Stack path=new Stack();  PegGame root, curRoot;  int depth=4;  int maxDesc=30;    Button upBtn;  public static void main(String[] args) {    Frame f = new Frame("Peg Game Graphics");    PegGraphics pgg = new PegGraphics();    f.add(pgg);    f.setSize(1000, 600);    f.show();  }    public PegGraphics() {    System.out.println("Computing tree...");    root = PegGame.getRoot();    root.createAllChildren();    curRoot = root;    addMouseListener(this);    setLayout(new BorderLayout());    upBtn = new Button("Up");    upBtn.addActionListener(this);    //add(upBtn, "North");  }    public void paint(Graphics g) {    curRoot.draw(g, getSize().width, getSize().height, depth);  }    public void actionPerformed(ActionEvent e) {    if (!path.isEmpty()) {      curRoot = (PegGame)path.pop();      repaint();    }  }    public void mouseClicked(MouseEvent e) {    PegGame tmp = curRoot.getPegGameAt(e.getPoint(), getSize().width, getSize().height, depth);    if (tmp != null && !tmp.equals(curRoot)) {      Vector v = curRoot.pathTo(tmp, depth);      if (v != null) { // shouldn't be...        for(int i=v.size()-1; i>0; i--) path.push(v.elementAt(i));      }      curRoot = tmp;      /*      depth = 2;      while(depth < 8 && curRoot.leafCount(depth) < maxDesc) depth++;      */      repaint();    }    else if (tmp.equals(curRoot)) {      if (!path.isEmpty()) {        curRoot = (PegGame)path.pop();        repaint();      }    }  }    public void mousePressed(MouseEvent e) { }  public void mouseReleased(MouseEvent e) { }  public void mouseEntered(MouseEvent e) { }  public void mouseExited(MouseEvent e) { }}