
/*
 * Pr3.java
 *
 * Created on November 19, 2002, 3:27 AM
 */

/**
 *
 * @author  Hasan
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class Pr3 extends JFrame {
 public static int WIDTH = 400;
 public static int HEIGHT = 400;
 public static String TITLE = "Project 3";

 Container frameContainer;
 // Swing components
 JTextField textField = new JTextField();
 JScrollPane scrollPane = new JScrollPane();
 JTree tree;
 Renderer renderer = new Renderer();
 private DefaultTreeModel model ;
 DefaultMutableTreeNode pg1 = 
  new DefaultMutableTreeNode("PG1");
 DefaultMutableTreeNode p1 = 
  new DefaultMutableTreeNode("p1");
 DefaultMutableTreeNode p1_ = 
  new DefaultMutableTreeNode("p1");
 DefaultMutableTreeNode p2 = 
  new DefaultMutableTreeNode("p2");
 DefaultMutableTreeNode p3 = 
  new DefaultMutableTreeNode("p3");
 DefaultMutableTreeNode p4= 
  new DefaultMutableTreeNode("p4");
 DefaultMutableTreeNode p5 = 
  new DefaultMutableTreeNode("p5");
 DefaultMutableTreeNode p6 = 
  new DefaultMutableTreeNode("p6");
  DefaultMutableTreeNode p6_ = 
  new DefaultMutableTreeNode("p6");
 DefaultMutableTreeNode p7 = 
  new DefaultMutableTreeNode("p7");
 DefaultMutableTreeNode pg2= 
  new DefaultMutableTreeNode("PG2");
 DefaultMutableTreeNode pg3= 
  new DefaultMutableTreeNode("PG3");
  
 String[] products = {"PG1","PG2","PG3"};
 JComboBox comboBox = new JComboBox(products);
 JMenuBar menuBar = new JMenuBar();
 JMenu fileMenu = new JMenu("File");
 JMenuItem fileExit = new JMenuItem("Exit");
 
 public Pr3() {
  super(TITLE);
  buildGUI();
  setupEventHandlers();
  setSize(WIDTH,HEIGHT);
  show();
 }

 void buildGUI() {
  setupMenuBar();
  setupTree();
  layoutComponents();
 }

 void setupMenuBar() {
  fileMenu.add(fileExit);
  menuBar.add(fileMenu);
  setJMenuBar(menuBar);
 }

 void setupTree() {
  pg1.add(p1);
  pg1.add(p1_);
  pg1.add(p2);
  pg1.add(pg2);
  //pg2.add(p3);
  pg2.add(p4);
  pg2.add(p5);
  pg2.add(pg3);
  pg3.add(p6);
  pg3.add(p6_);
  pg3.add(p7);
  tree = new JTree((TreeNode)pg1);
 }

 public void layoutComponents() {
  frameContainer = getContentPane();
  frameContainer.setLayout(new BorderLayout());
  tree.setCellRenderer(renderer);
  tree.addTreeSelectionListener(new TreeHandler());
  
  scrollPane.getViewport().add(tree);
  frameContainer.add("North",comboBox);
  frameContainer.add("Center",scrollPane);
  frameContainer.add("South",textField);
 }

 void setupEventHandlers() {
  addWindowListener(new WindowHandler());
  fileExit.addActionListener(new MenuItemHandler());
  comboBox.addActionListener(new ComboListener());
 }
 
 public static void main(String[] args) {
   Pr3 app = new Pr3();
 }

 public class WindowHandler extends WindowAdapter {
  public void windowClosing(WindowEvent e) {
   System.exit(0);
  }
 }

 public class MenuItemHandler implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   String cmd = e.getActionCommand();
   if(cmd.equals("Exit")) System.exit(0);
  }
 }

 public class TreeHandler implements TreeSelectionListener {
  public void valueChanged(TreeSelectionEvent e) {
   TreePath path = e.getPath();  
   String text = path.getPathComponent(path.getPathCount()-1).toString();
   textField.setText(text);
  }
 }
 
 class ComboListener implements ActionListener {
     
     public void actionPerformed(java.awt.event.ActionEvent e) {                            
         switch(comboBox.getSelectedIndex()){
         case 0:{tree = new JTree((TreeNode)pg1); break;}
         case 1:{tree = new JTree((TreeNode)pg2); break;}
         case 2:{tree = new JTree((TreeNode)pg3); break;}           
     }
     DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
     renderer.setLeafIcon(null);
     renderer.setClosedIcon(null);
     renderer.setOpenIcon(null);
     scrollPane.getViewport().add(tree);   
     tree.addTreeSelectionListener(new TreeHandler());
     }
     
 }
 
 class Renderer extends JLabel implements TreeCellRenderer {
     
  public Component  getTreeCellRendererComponent(JTree tree,
    Object value, boolean selected, boolean expanded,
    boolean leaf, int row, boolean hasFocus) 
  {
    setText(value.toString()+"                   ");
    return this;
  }
 }
}

