Save This Page
Home » openjdk-7 » net.sourceforge » jbird » swing » [javadoc | source]
    1   /*
    2   	J-Bird net/sourceforge/jbird/swing/JComboTree.java
    3   
    4   	Copyright 2001, 2002, 2003  Dick Repasky
    5   */
    6   package net.sourceforge.jbird.swing;
    7   
    8   import java.awt.Dimension;
    9   import java.awt.Window;
   10   
   11   import java.awt.event.MouseAdapter;
   12   import java.awt.event.MouseEvent;
   13   
   14   import javax.swing.JScrollPane;
   15   import javax.swing.JTextField;
   16   import javax.swing.JTree;
   17   import javax.swing.JWindow;
   18   
   19   import javax.swing.event.TreeSelectionEvent;
   20   import javax.swing.event.TreeSelectionListener;
   21   
   22   import javax.swing.tree.TreeModel;
   23   import javax.swing.tree.TreeNode;
   24   import javax.swing.tree.TreePath;
   25   import javax.swing.tree.TreeSelectionModel;
   26   
   27   /**
   28     * A tree selector that is modelled after JComboBox.  The name of the 
   29     * selected path appears in a text field, and if the user clicks on it, 
   30     * a tree appears fully expanded.  When the user selectes an alement of 
   31     * the tree, the tree disappears, and the name of the newly selected 
   32     * element appears in the text field.
   33     * <p>
   34     * Instantiate, set the selected path, and go. Use getSelectedPath
   35     * to retrieve the selection.
   36     * @author Dick Repasky
   37     * @since J-Bird 0.3.0
   38   */
   39   
   40   public class JComboTree extends JTextField {
   41   
   42   	protected JTree	    tree;
   43   	protected TreeModel tree_model;
   44   	protected JWindow   window;
   45   
   46   	protected TreePath selected_path;
   47   
   48   	public JComboTree(TreeModel model, Window owner) {
   49   		super();
   50   		tree_model = model;
   51   		buildTextField();
   52   		buildTree();
   53   		packageTree(owner);
   54   	}
   55   
   56   	public final TreeNode getSelectedNode() {
   57   		return (TreeNode)selected_path.getLastPathComponent();
   58   	}
   59   
   60   	public final TreePath getSelectedPath() {
   61   			return selected_path;
   62   	}
   63   
   64   	public void nullify() {
   65   		tree = null;
   66   		tree_model = null;
   67   		window = null;
   68   	}
   69   
   70   	public final void setSelectedPath(TreePath path) {
   71   		tree.setSelectionPath(path);
   72   		selected_path = path;
   73   		setText(path);
   74   	}
   75   
   76   	//////////////////////////  protected below //////////////////////////
   77   
   78   	protected final void buildTextField() {
   79   		setEditable(false);
   80   		addMouseListener(new MouseAdapter() {
   81   			public void mouseClicked(MouseEvent e) {
   82   				clickedTextField();
   83   			}
   84   		});
   85   	}
   86   
   87   	protected final void buildTree() {
   88   		tree = new JTree(tree_model);
   89   		tree.setEditable(false);
   90   		tree.getSelectionModel().setSelectionMode(
   91   				TreeSelectionModel.SINGLE_TREE_SELECTION);
   92   		expandAllRows();
   93   		class TSL implements TreeSelectionListener {
   94   			public void valueChanged(TreeSelectionEvent e) {
   95   				if (e.isAddedPath()) {
   96   					clickedTreeElement();
   97   				}
   98   			}
   99   		}
  100   		tree.addTreeSelectionListener(new TSL());
  101   	}
  102   
  103   	protected final void clickedTextField() {
  104   		window.setLocation(getLocation());
  105   		window.setSize(new Dimension(350, tree.getRowHeight() * 21));
  106   		window.setVisible(true);
  107   		// window.toFront();
  108   	}
  109   
  110   
  111   	protected final void clickedTreeElement() {
  112   		selected_path = tree.getSelectionPath();
  113   		setText(selected_path);
  114   		window.setVisible(false);
  115   	}
  116   
  117   	protected final void expandAllRows() {
  118   		int max = tree.getRowCount();
  119   		for (int idx = max - 1; idx >= 0; idx --) {
  120   			tree.expandRow(idx);
  121   		}
  122   	}
  123   
  124   	protected final void packageTree(Window owner) {
  125   		window = new JWindow(owner);
  126   		window.getContentPane().add(new JScrollPane(tree));
  127   	}
  128   
  129   
  130   	protected final void setText(TreePath path) {
  131   		final String value = ((TreeNode)(path.getLastPathComponent())).
  132   							toString();
  133   		Runnable doit = new Runnable() {
  134   			public void run() {
  135   				setText(value);
  136   			}
  137   		};
  138   		javax.swing.SwingUtilities.invokeLater(doit);
  139   	}
  140   
  141   }
  142   

Save This Page
Home » openjdk-7 » net.sourceforge » jbird » swing » [javadoc | source]