麻烦用通俗的语言讲一下DefaultMutableTreeNode类是作什么的?getLastSelectedPathComponent()函数作甚么?getUserObject()作甚么? 看了javadoc有些看不懂!以上函数和类都在下列代码的public void valueChanged(TreeSelectionEvent tse)里!/*
 * TestJTree1.java
 *
 * Created on September 5, 2002, 11:12 AM
 */package ch17;import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;/**
 *
 * @author  Stephen Potts
 */
public class TestJTree1 extends JFrame implements TreeSelectionListener
{
    private JTree tree1;
    private JTextField jtf;
    
    /** Creates a new instance of TestJTree1 */
    public TestJTree1()
    {
        jtf = new JTextField(15);
        jtf.setEditable(false);
        
        Object[] league = {"nl", "al"};
        
        Vector nlV = new Vector() 
        { 
            public String toString()
            {
                return "National League";
            }
        };
        
        nlV.addElement("Braves");
        nlV.addElement("Mets");
        nlV.addElement("Cardinals");
        nlV.addElement("Rockies" );        
        Vector alV = new Vector() 
        { 
            public String toString()
            {
                return "American League";
            }
        };
        
        alV.addElement("Rangers");
        alV.addElement("Twins");
        alV.addElement("A's");
        alV.addElement("White Sox" );
        
        league[0] = nlV;
        league[1] = alV;        tree1 = new JTree(league);
        tree1.setRootVisible(true);
        tree1.expandRow(0);        
        tree1.addTreeSelectionListener(this);
        
        getContentPane().add(new JScrollPane(tree1),
                                 BorderLayout.CENTER);
        getContentPane().add(jtf, BorderLayout.SOUTH);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 300, 300);
        setVisible(true);
        setTitle("Using a JTree");
    }
    
    public void valueChanged(TreeSelectionEvent tse)
    {
        DefaultMutableTreeNode dmtn = 
        (DefaultMutableTreeNode) tree1.getLastSelectedPathComponent();
        String name1 = (String) dmtn.getUserObject();
        jtf.setText("you selected: " + name1);
        jtf.setForeground(Color.red);
    }
    
    public static void main(String args[])
    {
        TestJTree1 tjt1 = new TestJTree1();
    }
}

解决方案 »

  1.   

    DefaultMutableTreeNode是JDK提供的默认的构造Tree的结点类型。JTree的结点类型必须是实现了TreeNode接口的类的对象,而DefaultMutableTreeNode就实现TreeNode接口,所以可以作为JTree的结点。getLastSelectedPathComponent返回所选中的路径上的最后一个结点。getUserObject返回这个Node所对应的用户对象,我们通常使用一个Object对象构造一个TreeNode,当Tree显示出来时,那个对象的toString方法会作为那个结点的文字。getUserObject就返回这个对象。