我做了一个Jtree有“我的好友”这个节点,这个节点下有又有三个节点:大学同学,高中同学,初中同学。怎么让我单击“我的好友”这个节点与单击“大学同学”这几个节点右击弹出的菜单内容不一样啊?

解决方案 »

  1.   

    对节点类型A,设置userobject为class 1, 对节点类型B,设置userobject为class 2.
    获取节点时,判断userobject的class,调用不同的popupMenu如果节点内容比较固定,可以直接根据节点的值来显示不同的菜单
      

  2.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;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.TreePath;public class Test {
        
        public static void main(String[] args) {
            JFrame frame = new JFrame("JTree Demo");
            JTree tree = new JTree();
            tree.addMouseListener( new TreeListener() );
            JScrollPane scrollPane = new JScrollPane( tree );
            frame.getContentPane().add( scrollPane );
            frame.pack();
            frame.setVisible( true );
            frame.setDefaultCloseOperation( javax.swing.JFrame.EXIT_ON_CLOSE );
        }
        
    }class TreeListener implements java.awt.event.MouseListener {

    private JPopupMenu popMenu = null;
    private JMenuItem menuProperty = null;

    public TreeListener() {
    this.popMenu = new JPopupMenu();
    } public void mouseReleased(MouseEvent e) {
    if( e.isPopupTrigger() ) {
    popMenu.removeAll();
    TreePath path = ((JTree)e.getComponent()).getPathForLocation(e.getX(), e.getY());
    if( path!=null ) {
    final DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
    // 这里添加你自己的判断和动作
    if( node.isLeaf() ) {
    menuProperty = new JMenuItem("Leaf");
    menuProperty.addActionListener( new ActionListener() {
    public void actionPerformed( ActionEvent e ) {
    System.out.println( node.getUserObject() + " is leaf." );
    }
    } );
    } else {
    menuProperty = new JMenuItem("Not Leaf");
    menuProperty.addActionListener( new ActionListener() {
    public void actionPerformed( ActionEvent e ) {
    System.out.println( node.getUserObject() + " is not leaf." );
    }
    } );
    }
    popMenu.add( menuProperty );
    popMenu.show(e.getComponent(), e.getX(), e.getY());
    }
    }
    }

    public void mouseClicked(MouseEvent arg0) {

    } public void mouseEntered(MouseEvent arg0) {

    } public void mouseExited(MouseEvent arg0) {

    } public void mousePressed(MouseEvent arg0) {

    }
    }