The Source for Java Technology Collaboration


Demonstrates how to change the root of a default tree model. Select any node and press the "Set As Root" button to make you selected node the new root.

-- Main.aberrant - 02 Jun 2008

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

/**
 * Demonstrates how to change the root of a default tree model. This allows for
 * some simple filtering.
 * 
 * @author Collin Fagan
 */
public class SwitchRootDemo extends JPanel {

   private JTree tree = new JTree();
   private DefaultTreeModel treeModel;
   private DefaultMutableTreeNode baseRoot;
   private JButton restoreRoot = new JButton("Restore Root");
   private JButton setNewRoot = new JButton("Set As Root");

   /**
    * Constructor builds the demo creating the table and associated renderer.
    */
   public SwitchRootDemo() {
      setLayout(new BorderLayout());
      JScrollPane scrollPane = new JScrollPane(tree);
      add(scrollPane, BorderLayout.CENTER);

      JToolBar buttonBar = new JToolBar();
      buttonBar.setFloatable(false);
      buttonBar.add(setNewRoot);
      buttonBar.add(restoreRoot);

      setNewRoot.addActionListener(setNewRootAction);
      restoreRoot.addActionListener(restoreRootAction);

      add(buttonBar, BorderLayout.SOUTH);

      treeModel = createModel();
      baseRoot = (DefaultMutableTreeNode) treeModel.getRoot();

      tree.setModel(treeModel);
   }

   /**
    * Action listener used for the "Set New Root" button.
    */
   private final ActionListener setNewRootAction = new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {

         TreePath path = tree.getSelectionModel().getLeadSelectionPath();

         if (path != null) {
            treeModel.setRoot((TreeNode) path.getLastPathComponent());
            restoreRoot.setEnabled(true);
         }
      }

   };

   /**
    * Action listener used for the "restore root" button.
    */
   private final ActionListener restoreRootAction = new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
         treeModel.setRoot(baseRoot);
         restoreRoot.setEnabled(false);
      }

   };

   /**
    * Start the demo on the Event Dispatch Thread.
    * 
    * @param args
    *            the command line arguments
    */
   public static void main(String[] args) {

      // turn bold fonts off in metal
      UIManager.put("swing.boldMetal", Boolean.FALSE);

      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            JFrame demoFrame = new JFrame();
            demoFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            demoFrame.setContentPane(new SwitchRootDemo());
            demoFrame.pack();
            demoFrame.setVisible(true);
         }
      });
   }

   /**
    * Creates the demos tree model which contains java books.
    * 
    * @return the demos tree model
    */
   private DefaultTreeModel createModel() {
      DefaultMutableTreeNode root = new DefaultMutableTreeNode("Books");
      DefaultMutableTreeNode category = null;
      DefaultMutableTreeNode book = null;

      category = new DefaultMutableTreeNode("Books for Java Programmers");
      root.add(category);

      // original Tutorial
      book = new DefaultMutableTreeNode(
            "The Java Tutorial: A Short Course on the Basics");
      category.add(book);

      // Tutorial Continued
      book = new DefaultMutableTreeNode(
            "The Java Tutorial Continued: The Rest of the JDK");
      category.add(book);

      // JFC Swing Tutorial
      book = new DefaultMutableTreeNode(
            "The JFC Swing Tutorial: A Guide to Constructing GUIs");
      category.add(book);

      // Bloch
      book = new DefaultMutableTreeNode(
            "Effective Java Programming Language Guide");
      category.add(book);

      // Arnold/Gosling
      book = new DefaultMutableTreeNode("The Java Programming Language");
      category.add(book);

      // Chan
      book = new DefaultMutableTreeNode("The Java Developers Almanac");
      category.add(book);

      category = new DefaultMutableTreeNode("Books for Java Implementers");
      root.add(category);

      // VM
      book = new DefaultMutableTreeNode(
            "The Java Virtual Machine Specification");
      category.add(book);

      // Language Spec
      book = new DefaultMutableTreeNode("The Java Language Specification");
      category.add(book);
      return new DefaultTreeModel(root);
   }

}

Topic SwitchRootDemo . { Edit | Ref-By | Printable | Diffs r2 < r1 | More }
 XML java.net RSS

Revision r2 - 03 Jun 2008 - 01:29:29 - Main.aberrant
Parents: WebHome > Javatutorials