Java Tutorial/Swing Event/TreeSelectionListener
Содержание
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>