Java tutorial
import java.awt.event.MouseAdapter; 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; import javax.swing.tree.TreeSelectionModel; public class Main extends JFrame { public Main() { JTree myTree = new JTree(); myTree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); myTree.addMouseListener(new MyMouseAdapter()); add(new JScrollPane(myTree)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String[] args) { new Main(); } } class MyMouseAdapter extends MouseAdapter { private void myPopupEvent(MouseEvent e) { int x = e.getX(); int y = e.getY(); JTree tree = (JTree) e.getSource(); TreePath path = tree.getPathForLocation(x, y); if (path == null) return; DefaultMutableTreeNode rightClickedNode = (DefaultMutableTreeNode) path.getLastPathComponent(); TreePath[] selectionPaths = tree.getSelectionPaths(); boolean isSelected = false; if (selectionPaths != null) { for (TreePath selectionPath : selectionPaths) { if (selectionPath.equals(path)) { isSelected = true; } } } if (!isSelected) { tree.setSelectionPath(path); } if (rightClickedNode.isLeaf()) { JPopupMenu popup = new JPopupMenu(); final JMenuItem refreshMenuItem = new JMenuItem("refresh"); refreshMenuItem.addActionListener(ev -> System.out.println("refresh!")); popup.add(refreshMenuItem); popup.show(tree, x, y); } } public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) myPopupEvent(e); } public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) myPopupEvent(e); } }