jTree如何判断当前选择的项是节点还是叶子~现在要求选择叶子和选择叶子的上层节点的时候右键点击后弹出不同的菜单,菜鸟求助,有个小例子最好~能弹出不同的右键菜单,感激不尽~

解决方案 »

  1.   

    楼主,找本最基本的讲解 java swing 组件的书,把里面的例子全都敲一遍吧。。
      

  2.   

    算了,给你写了个完整的sample,如果是叶节点,只有删除和编辑菜单,如果是枝节点,会多一个增加菜单。
    /**   
    * @Title: Test.java 
    * @Package swing 
    * @Description: TODO(用一句话描述该文件做什么) 
    * @author youjianbo    
    * @date 2010-9-26 上午10:12:46 
    * @version V1.0   
    */  
    package swing;import java.awt.event.ActionEvent;  
    import java.awt.event.ActionListener;  
    import java.awt.event.MouseEvent;  
    import java.awt.event.MouseListener;  
    import javax.swing.JFrame;  
    import javax.swing.JMenuItem;  
    import javax.swing.JPopupMenu;  
    import javax.swing.JScrollPane;  
    import javax.swing.JTree;  
     import javax.swing.tree.DefaultMutableTreeNode;  
     import javax.swing.tree.DefaultTreeCellEditor;  
     import javax.swing.tree.DefaultTreeCellRenderer;  
     import javax.swing.tree.DefaultTreeModel;  
     import javax.swing.tree.TreePath;  
     import javax.swing.tree.TreeSelectionModel;  
       
     public class Test extends JFrame implements MouseListener,ActionListener {  
           
         private static final long serialVersionUID = 1L;  
         JTree tree;  
         JPopupMenu popMenu;  
         JMenuItem addItem;  
         JMenuItem delItem;  
         JMenuItem editItem;  
       
         public Test() {  
             tree = new JTree();  
             tree.setEditable(true);  
             tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);  
             tree.addMouseListener(this);  
             tree.setCellEditor(new DefaultTreeCellEditor(tree, new DefaultTreeCellRenderer()));  
             getContentPane().add(tree);  
             setSize(200, 200);  
       
             popMenu = new JPopupMenu();  
             addItem = new JMenuItem("添加");  
             addItem.addActionListener(this);  
             delItem = new JMenuItem("删除");  
             delItem.addActionListener(this);  
             editItem = new JMenuItem("修改");  
             editItem.addActionListener(this);  
       
             popMenu.add(addItem);  
             popMenu.add(delItem);  
             popMenu.add(editItem);  
       
             getContentPane().add(new JScrollPane(tree));  
         }  
       
         public void mouseClicked(MouseEvent e) {  
       
         }  
       
         public void mouseEntered(MouseEvent e) {  
       
         }  
       
         public void mouseExited(MouseEvent e) {  
       
         }  
       
         public void mousePressed(MouseEvent e) {  
             TreePath path = tree.getPathForLocation(e.getX(), e.getY()); 
             if (path == null) {  
                 return;  
             }  
             tree.setSelectionPath(path);  
             
             if (e.getButton() == 3) 
             {  
              DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); 
              if(node.isLeaf())
                 {
                  System.out.println("是叶节点");
                  popMenu.remove(addItem);
                 }else
                 {
                  popMenu.add(addItem);
                 }
                 popMenu.show(tree, e.getX(), e.getY());  
             }  
         }  
       
         public void mouseReleased(MouseEvent e) {  
       
         }  
       
         public void actionPerformed(ActionEvent e) {  
             DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();  
             
             if (e.getSource() == addItem) {  
                 ((DefaultTreeModel) tree.getModel()).insertNodeInto(new DefaultMutableTreeNode("Test"), node, node  
                         .getChildCount());  
                 tree.expandPath(tree.getSelectionPath());  
             } else if (e.getSource() == delItem) {  
                 if (node.isRoot()) {  
                     return;  
                 }  
                 ((DefaultTreeModel) tree.getModel()).removeNodeFromParent(node);  
             } else if (e.getSource() == editItem) {  
                 tree.startEditingAtPath(tree.getSelectionPath());  
             }  
         }  
       
         public static void main(String[] args) {  
             Test frame = new Test();  
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
             frame.setVisible(true);  
         }  
     }