SwingTree.java



// SE MUESTRA LA IMPLEMENTACION DE ARBOLES EN CASCADA
import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import javax.swing.*;

public class SwingTree extends JFrame
{
	public static int WIDTH = 400;
	public static int HEIGHT = 400;
	public static String TITLE = "SwingTree";

	Container frameContainer;
	
	JTextField textField = new JTextField();
	JScrollPane scrollPane = new JScrollPane();
	JTree tree;
	Renderer renderer = new Renderer();
	DefaultMutableTreeNode tipos = new DefaultMutableTreeNode("Tipos de Numeros");
	DefaultMutableTreeNode enteros = new DefaultMutableTreeNode("Numeros enteros");
	DefaultMutableTreeNode flotantes = new DefaultMutableTreeNode("Numeros flotante");
	DefaultMutableTreeNode uno = new DefaultMutableTreeNode("1");
	DefaultMutableTreeNode dos = new DefaultMutableTreeNode("2");
	DefaultMutableTreeNode tres = new DefaultMutableTreeNode("3");
	DefaultMutableTreeNode cuatro = new DefaultMutableTreeNode("4");
	DefaultMutableTreeNode cinco = new DefaultMutableTreeNode("5");
	DefaultMutableTreeNode dos_2 = new DefaultMutableTreeNode("2.2");
	DefaultMutableTreeNode tres_3 = new DefaultMutableTreeNode("3.3");
	DefaultMutableTreeNode cuatro_4 = new DefaultMutableTreeNode("4.4");
	DefaultMutableTreeNode cinco_5 = new DefaultMutableTreeNode("5.5");
	DefaultMutableTreeNode uno_1 = new DefaultMutableTreeNode("1.1");
	
	JMenuBar menuBar = new JMenuBar();
	JMenu fileMenu = new JMenu("Archivo");
	JMenuItem fileExit = new JMenuItem("Salir");
 
	public SwingTree()
	{
		super(TITLE); buildGUI();
		setupEventHandlers();
		setSize(WIDTH,HEIGHT); setVisible(true);
	}
 
	void buildGUI()
	{ setupMenuBar(); setupTree(); layoutComponents(); }

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

	void setupTree()
	{
		tipos.add(enteros);
		tipos.add(flotantes);
		enteros.add(uno);
		enteros.add(dos);
		enteros.add(tres);
		enteros.add(cuatro);
		enteros.add(cinco);
		flotantes.add(uno_1);
		flotantes.add(dos_2);
		flotantes.add(tres_3);
		flotantes.add(cuatro_4);
		flotantes.add(cinco_5);
		
		tree = new JTree(tipos);
	}

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

	void setupEventHandlers()
	{
		addWindowListener(new WindowHandler());
		fileExit.addActionListener(new MenuItemHandler());
	}

	public static void main(String[] args) { SwingTree app = new SwingTree(); }

	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("Salir")) 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();
			if(path.getPathCount()>3)
			{
				text += ": ";
				text += Integer.toString((int)(Math.random()*50))+" Entero ";
				text += Integer.toString((int)(Math.random()*50))+" Decimal";
			}
			textField.setText(text);
		}
	}
 
	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;
		}
	}
}