Java Tutorial/Swing Event/TreeSelectionListener

Материал из Java эксперт
Перейти к: навигация, поиск

Add nodes to a tree with tree node selection listener

   <source lang="java">

import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; public class MainClass extends JFrame {

 private JTree tree1;
 private JLabel showName = new JLabel();
 public static void main(String[] args) {
   new MainClass();
 }
 public MainClass() {
   this.setSize(225, 325);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JPanel panel1 = new JPanel();
   DefaultMutableTreeNode root, a, b, c, d, e;
   root = new DefaultMutableTreeNode("A");
   a = makeShow("B", root);
   makeShow("C", a);
   makeShow("D", a);
   b = makeShow("E", root);
   d = makeShow("F", b);
   makeShow("G", d);
   e = makeShow("H", b);
   makeShow("I", e);
   makeShow("J", b);
   makeShow("K", b);
   c = makeShow("L", root);
   makeShow("M", c);
   makeShow("N", c);
   makeShow("O", c);
   tree1 = new JTree(root);
   tree1.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
   tree1.setVisibleRowCount(12);
   tree1.addTreeSelectionListener(new TreeListener());
   JScrollPane scroll = new JScrollPane(tree1);
   panel1.add(scroll);
   panel1.add(showName);
   this.add(panel1);
   this.setVisible(true);
 }
 private DefaultMutableTreeNode makeShow(String title, DefaultMutableTreeNode parent) {
   DefaultMutableTreeNode show;
   show = new DefaultMutableTreeNode(title);
   parent.add(show);
   return show;
 }
 private class TreeListener implements TreeSelectionListener {
   public void valueChanged(TreeSelectionEvent e) {
     Object o = tree1.getLastSelectedPathComponent();
     DefaultMutableTreeNode show = (DefaultMutableTreeNode) o;
     String title = (String) show.getUserObject();
     showName.setText(title);
   }
 }

}</source>





How to Write a Tree Selection Listener

   <source lang="java">

import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; public class UsingTreeSelectionListener {

 public static void main(String[] a) {
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JTree tree = new JTree();
   tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
   tree.addTreeSelectionListener(new SelectionListener());
   frame.add(new JScrollPane(tree));
   frame.setSize(300, 200);
   frame.setVisible(true);
 }

} class SelectionListener implements TreeSelectionListener {

 public void valueChanged(TreeSelectionEvent se) {
   JTree tree = (JTree) se.getSource();
   DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
       .getLastSelectedPathComponent();
   String selectedNodeName = selectedNode.toString();
   if (selectedNode.isLeaf()) {
     System.out.println(selectedNodeName);
   }
 }

}</source>





implements TreeSelectionListener

   <source lang="java">

import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreeSelectionModel; public class Main extends JFrame {

 public Main() {
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   DefaultMutableTreeNode root = new DefaultMutableTreeNode("abcde");
   DefaultMutableTreeNode node = new DefaultMutableTreeNode("1");
   node.add(new DefaultMutableTreeNode("12345"));
   node.add(new DefaultMutableTreeNode("testing"));
   root.add(node);
   root.add(new DefaultMutableTreeNode("1234567890"));
   TreeModel tm = new DefaultTreeModel(root);
   JTree tree = new JTree(tm);
   tree.getSelectionModel().addTreeSelectionListener(new Selector());
   tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
   getContentPane().add(tree, BorderLayout.CENTER);
   pack();
   setVisible(true);
 }
 private class Selector implements TreeSelectionListener {
   public void valueChanged(TreeSelectionEvent event) {
     Object obj = event.getNewLeadSelectionPath().getLastPathComponent();
     System.out.println("" + obj.toString().length());
   }
 }
 public static void main(String[] args) {
   Main m = new Main();
 }

}</source>





TreeSelectionEvent.getNewLeadSelectionPath().getLastPathComponent()

   <source lang="java">

import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreeSelectionModel; public class Main extends JFrame {

 public Main() {
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   DefaultMutableTreeNode root = new DefaultMutableTreeNode("abcde");
   DefaultMutableTreeNode node = new DefaultMutableTreeNode("1");
   node.add(new DefaultMutableTreeNode("12345"));
   node.add(new DefaultMutableTreeNode("testing"));
   root.add(node);
   root.add(new DefaultMutableTreeNode("1234567890"));
   TreeModel tm = new DefaultTreeModel(root);
   JTree tree = new JTree(tm);
   tree.getSelectionModel().addTreeSelectionListener(new Selector());
   tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
   getContentPane().add(tree, BorderLayout.CENTER);
   pack();
   setVisible(true);
 }
 private class Selector implements TreeSelectionListener {
   public void valueChanged(TreeSelectionEvent event) {
     Object obj = event.getNewLeadSelectionPath().getLastPathComponent();
     System.out.println("" + obj.toString().length());
   }
 }
 public static void main(String[] args) {
   Main m = new Main();
 }

}</source>





TreeSelectionListener and TreeSelectionEvent

   <source lang="java">

/*

* Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   - Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*
*   - Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*
*   - Neither the name of Sun Microsystems nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**

* A 1.4 application that requires the following additional files:
*   TreeDemoHelp.html
*    arnold.html
*    bloch.html
*    chan.html
*    jls.html
*    swingtutorial.html
*    tutorial.html
*    tutorialcont.html
*    vm.html
*/

import java.awt.Dimension; import java.awt.GridLayout; import java.io.IOException; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeSelectionModel; public class TreeIconDemo extends JPanel implements TreeSelectionListener {

 private JEditorPane htmlPane;
 private JTree tree;
 private URL helpURL;
 private static boolean DEBUG = false;
 public TreeIconDemo() {
   super(new GridLayout(1, 0));
   // Create the nodes.
   DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series");
   createNodes(top);
   // Create a tree that allows one selection at a time.
   tree = new JTree(top);
   tree.getSelectionModel().setSelectionMode(
       TreeSelectionModel.SINGLE_TREE_SELECTION);
   // Set the icon for leaf nodes.
   ImageIcon leafIcon = createImageIcon("images/middle.gif");
   if (leafIcon != null) {
     DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
     renderer.setLeafIcon(leafIcon);
     tree.setCellRenderer(renderer);
   } else {
     System.err.println("Leaf icon missing; using default.");
   }
   // Listen for when the selection changes.
   tree.addTreeSelectionListener(this);
   // Create the scroll pane and add the tree to it.
   JScrollPane treeView = new JScrollPane(tree);
   // Create the HTML viewing pane.
   htmlPane = new JEditorPane();
   htmlPane.setEditable(false);
   initHelp();
   JScrollPane htmlView = new JScrollPane(htmlPane);
   // Add the scroll panes to a split pane.
   JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
   splitPane.setTopComponent(treeView);
   splitPane.setBottomComponent(htmlView);
   Dimension minimumSize = new Dimension(100, 50);
   htmlView.setMinimumSize(minimumSize);
   treeView.setMinimumSize(minimumSize);
   splitPane.setDividerLocation(100); // XXX: ignored in some releases
   // of Swing. bug 4101306
   // workaround for bug 4101306:
   // treeView.setPreferredSize(new Dimension(100, 100));
   splitPane.setPreferredSize(new Dimension(500, 300));
   // Add the split pane to this panel.
   add(splitPane);
 }
 /** Required by TreeSelectionListener interface. */
 public void valueChanged(TreeSelectionEvent e) {
   DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
       .getLastSelectedPathComponent();
   if (node == null)
     return;
   Object nodeInfo = node.getUserObject();
   if (node.isLeaf()) {
     BookInfo book = (BookInfo) nodeInfo;
     displayURL(book.bookURL);
     if (DEBUG) {
       System.out.print(book.bookURL + ":  \n    ");
     }
   } else {
     displayURL(helpURL);
   }
   if (DEBUG) {
     System.out.println(nodeInfo.toString());
   }
 }
 private class BookInfo {
   public String bookName;
   public URL bookURL;
   public BookInfo(String book, String filename) {
     bookName = book;
     bookURL = TreeIconDemo.class.getResource(filename);
     if (bookURL == null) {
       System.err.println("Couldn"t find file: " + filename);
     }
   }
   public String toString() {
     return bookName;
   }
 }
 private void initHelp() {
   String s = "TreeDemoHelp.html";
   helpURL = TreeIconDemo.class.getResource(s);
   if (helpURL == null) {
     System.err.println("Couldn"t open help file: " + s);
   } else if (DEBUG) {
     System.out.println("Help URL is " + helpURL);
   }
   displayURL(helpURL);
 }
 private void displayURL(URL url) {
   try {
     if (url != null) {
       htmlPane.setPage(url);
     } else { // null url
       htmlPane.setText("File Not Found");
       if (DEBUG) {
         System.out.println("Attempted to display a null URL.");
       }
     }
   } catch (IOException e) {
     System.err.println("Attempted to read a bad URL: " + url);
   }
 }
 private void createNodes(DefaultMutableTreeNode top) {
   DefaultMutableTreeNode category = null;
   DefaultMutableTreeNode book = null;
   category = new DefaultMutableTreeNode("Books for Java Programmers");
   top.add(category);
   // original Tutorial
   book = new DefaultMutableTreeNode(new BookInfo(
       "The Java Tutorial: A Short Course on the Basics", "tutorial.html"));
   category.add(book);
   // Tutorial Continued
   book = new DefaultMutableTreeNode(
       new BookInfo("The Java Tutorial Continued: The Rest of the JDK",
           "tutorialcont.html"));
   category.add(book);
   // JFC Swing Tutorial
   book = new DefaultMutableTreeNode(new BookInfo(
       "The JFC Swing Tutorial: A Guide to Constructing GUIs",
       "swingtutorial.html"));
   category.add(book);
   // Bloch
   book = new DefaultMutableTreeNode(new BookInfo(
       "Effective Java Programming Language Guide", "bloch.html"));
   category.add(book);
   // Arnold/Gosling
   book = new DefaultMutableTreeNode(new BookInfo(
       "The Java Programming Language", "arnold.html"));
   category.add(book);
   // Chan
   book = new DefaultMutableTreeNode(new BookInfo(
       "The Java Developers Almanac", "chan.html"));
   category.add(book);
   category = new DefaultMutableTreeNode("Books for Java Implementers");
   top.add(category);
   // VM
   book = new DefaultMutableTreeNode(new BookInfo(
       "The Java Virtual Machine Specification", "vm.html"));
   category.add(book);
   // Language Spec
   book = new DefaultMutableTreeNode(new BookInfo(
       "The Java Language Specification", "jls.html"));
   category.add(book);
 }
 /** Returns an ImageIcon, or null if the path was invalid. */
 protected static ImageIcon createImageIcon(String path) {
   java.net.URL imgURL = TreeIconDemo.class.getResource(path);
   if (imgURL != null) {
     return new ImageIcon(imgURL);
   } else {
     System.err.println("Couldn"t find file: " + path);
     return null;
   }
 }
 /**
  * Create the GUI and show it. For thread safety, this method should be
  * invoked from the event-dispatching thread.
  */
 private static void createAndShowGUI() {
   // Create and set up the window.
   JFrame frame = new JFrame("TreeIconDemo");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   // Create and set up the content pane.
   TreeIconDemo newContentPane = new TreeIconDemo();
   newContentPane.setOpaque(true); // content panes must be opaque
   frame.setContentPane(newContentPane);
   // Display the window.
   frame.pack();
   frame.setVisible(true);
 }
 public static void main(String[] args) {
   // Schedule a job for the event-dispatching thread:
   // creating and showing this application"s GUI.
   javax.swing.SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       createAndShowGUI();
     }
   });
 }

}</source>