Java Tutorial/Swing Event/TreeSelectionListener

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

Add nodes to a tree with tree node selection listener

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);
    }
  }
}





How to Write a Tree Selection Listener

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);
    }
  }
}





implements TreeSelectionListener

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();
  }
}





TreeSelectionEvent.getNewLeadSelectionPath().getLastPathComponent()

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();
  }
}





TreeSelectionListener and TreeSelectionEvent

/*
 * 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();
      }
    });
  }
}