Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Have a popup attached to a JTree

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; public class Main extends JPanel {   DefaultMutableTreeNode root = new DefaultMutableTreeNode("root", true),       node1 = new DefaultMutableTreeNode("node 1", true), node2 = new DefaultMutableTreeNode(           "node 2", true), node3 = new DefaultMutableTreeNode("node 3", true);   MyJTree tree = new MyJTree(root);   public Main() {     root.add(node1);     node1.add(node2);     root.add(node3);     setLayout(new BorderLayout());     add(new JScrollPane((JTree) tree), "Center");   }   public static void main(String s[]) {     JFrame frame = new JFrame("Tree With Popup");     Main panel = new Main();     frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);     frame.setBackground(Color.lightGray);     frame.getContentPane().add(panel, "Center");     frame.setSize(panel.getPreferredSize());     frame.setVisible(true);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   } } class MyJTree extends JTree implements ActionListener {   JPopupMenu popup = new JPopupMenu();   JMenuItem mi = new JMenuItem("Insert a children");   MyJTree(DefaultMutableTreeNode dmtn) {     super(dmtn);         mi.addActionListener(this);     mi.setActionCommand("insert");     popup.add(mi);     mi = new JMenuItem("Remove this node");     mi.addActionListener(this);     mi.setActionCommand("remove");     popup.add(mi);     addMouseListener(new MouseAdapter() {       public void mouseReleased(MouseEvent e) {         if (e.isPopupTrigger()) {           popup.show((JComponent) e.getSource(), e.getX(), e.getY());         }       }     });   }   public void actionPerformed(ActionEvent ae) {     DefaultMutableTreeNode dmtn, node;     TreePath path = this.getSelectionPath();     dmtn = (DefaultMutableTreeNode) path.getLastPathComponent();     if (ae.getActionCommand().equals("insert")) {       node = new DefaultMutableTreeNode("children");       dmtn.add(node);       ((DefaultTreeModel) this.getModel()).nodeStructureChanged((TreeNode) dmtn);     }     if (ae.getActionCommand().equals("remove")) {       node = (DefaultMutableTreeNode) dmtn.getParent();       int nodeIndex = node.getIndex(dmtn);       dmtn.removeAllChildren();       node.remove(nodeIndex);       ((DefaultTreeModel) this.getModel()).nodeStructureChanged((TreeNode) dmtn);     }   } }