import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;public class JtreeDemo extends JApplet 
{
    JTree tree;
    JTextField jtf;    public void init()
    {
       Container cp=getContentPane();
       cp.setLayout(new BorderLayout());       DefaultMutableTreeNode top = 
              new DefaultMutableTreeNode("TOP");
       
       DefaultMutableTreeNode a = 
              new DefaultMutableTreeNode("A");
       
       DefaultMutableTreeNode a1 = 
              new DefaultMutableTreeNode("A1");
       a.add(a1);
       DefaultMutableTreeNode a2 = 
              new DefaultMutableTreeNode("A2");
       a.add(a2);
       DefaultMutableTreeNode a3 = 
              new DefaultMutableTreeNode("A3");
       a.add(a3);
       
       DefaultMutableTreeNode b = 
              new DefaultMutableTreeNode("B");
       
       DefaultMutableTreeNode b1 = 
              new DefaultMutableTreeNode("B1");
       b.add(b1);
       DefaultMutableTreeNode b2 = 
              new DefaultMutableTreeNode("B2");
       b.add(b2);
       DefaultMutableTreeNode b3 = 
              new DefaultMutableTreeNode("B3");
       b.add(b3);
       
       top.add(a);
       top.add(b);       tree = new JTree(top);
              int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
       int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;       JScrollPane  jsp = new JScrollPane(tree,v,h);
       
       cp.add(jsp, BorderLayout.CENTER);
       
       jtf=new JTextField(20);
       cp.add(jtf,BorderLayout.SOUTH); 
       tree.addMouseListener(new MouseAdapter()
    {
       public void mouseClicked(MouseEvent me)
    {
      doMouseClicked(me);
    }
    });
    }    void doMouseClicked(MouseEvent me)
{
    TreePath tp=tree.getPathForLocation(me.getX(),me.getY());
    if (tp!= null)
jtf.setText(tp.toString());
    else 
jtf.setText("");

}
}想知道一下  运行这个程序,双击节点能自动展开,那程序里没有定义双击的相应事件啊?  是Jtree里面封装好了么?

解决方案 »

  1.   

    呵呵,LZ真的不错。想想自己没关心过呢。。羞愧。是这样的,LZ一个类实现了TreeSelectionListener接口之后,就会有一个方法。 public void valueChanged(TreeSelectionEvent e) {
            String slt_datas = e.getPath().getLastPathComponent().toString();
            //这个slt_datas就是你每次选择的路径名。
        }
    另外附上一个初始化就展开树的代码,希望能对LZ有所帮助。 /**
         *  该方法用来展开树
         * @param tree JTree 需要展开的树
         * @param parent TreePath 树的路径
         * @param expand boolean 是否展开
         */
        private void expandAll(JTree tree, TreePath parent, boolean expand) {
            //   Traverse   children
            TreeNode node = (TreeNode) parent.getLastPathComponent();
            if (node.getChildCount() >= 0) {
                for (Enumeration e = node.children(); e.hasMoreElements(); ) {
                    TreeNode n = (TreeNode) e.nextElement();
                    TreePath path = parent.pathByAddingChild(n);
                    expandAll(tree, path, expand);
                }
            }        if (expand) {
                tree.expandPath(parent);
            } else {
                tree.collapsePath(parent);
            }
        }
      

  2.   

      谢谢您啊  不过还是不太清楚  你是说Jtree类里面包含了鼠标双击节点的事件相应的函数么  然后可以自动调用? 我比较笨啦  又是初学者  呵呵  还有啊   Jtree类里面的代码你是在哪找的?^_^
      

  3.   


    JTree有一个方法啊,就是当它的值改变的时候就会调用。这是当你实现这个接口TreeSelectionListener时候、然后你可以在方法些一些触发事件啊。这些代码是自己以前敲的啊。呵呵,多动手就可以了啊。
      

  4.   

    今天有时间,如果还不懂的话加我QQ吧。我来教你做。
    QQ199108021