上面的代码有点乱,还有一个小疏忽(应该为叶节点时才弹出菜单),重贴一编:MouseListener treeMouseListener = new MouseAdapter() {
    public void mouseReleased(MouseEvent e) {
      if (e.isPopupTrigger() &&tree.getRowForLocation(e.getX(), e.getY())!= -1) {
        treeNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
        if (treeNode.isLeaf()) 
          popupMenu.show(e.getComponent(), e.getX(), e.getY());
      }
    }
  };

解决方案 »

  1.   

    还是乱啊,删叶删不掉。不好意思,再贴一编:MouseListener treeMouseListener = new MouseAdapter() {
      public void mouseReleased(MouseEvent e) {
        if(e.isPopupTrigger() &&tree.getRowForLocation(e.getX(), e.getY())!= -1){
          treeNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
            if (treeNode.isLeaf()) 
              popupMenu.show(e.getComponent(), e.getX(), e.getY());
          }
        }
      };这回应该差不多了吧?
      

  2.   

    if (SwingUtilities.isRightMouseButton(e))
    {
        treeNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
        if (treeNode.isLeaf()) 
            popupMenu.show(e.getComponent(), e.getX(), e.getY());
    }
      

  3.   

    重载MouseAdapter的mousePressed()方法,判断为右键时,setSelectionPathgetPathForLocation(e.getX(), e.getY()));
    然后处理弹出
      

  4.   

    写错了,应该是这样:
    JTree tree = ...
    tree.addMouseListener(new MouseAdapter()
    {
        public void mouseClicked(MouseEvent e)
        {
            if (SwingUtilities.isRightMouseButton(e))
            {
                int selRow = formTree.getRowForLocation(x, y);
                if (selRow != -1)
                {
                    TreePath selPath = formTree.getPathForLocation(x, y);
                    if(selPath != null)
                    {
                        formTree.setSelectionPath(selPath);
                        popupMenu.show(e.getComponent(), e.getX(), e.getY());
                    }
                }
            }
        }
    }