How to use it ?
//Manipulating popup menu----------------------------------------------- JContextTreePopup popup = tree.getPopupMenu(); TreePopupItem myTreePopupItem = buildPopupItem(); popup.addItem(myTreePopupItem); // popup.addItem( index, myTreePopupItem); // popup.addAllItem( index, Collection <? extends TreePopupItem>); // popup.addAllItem(Collection <? extends TreePopupItem>); // popup.removeItem( myTreePopupItem ); // popup.removeItem( index ); // TreePopupItem[] tpi = popup.getControls(); public TreePopupItem buildPopupItem() { class ActionItem implements TreePopupItem { private JMenu menu = new JMenu("Grid Menu"); public ActionItem() { menu.add(new JMenuItem("Action1")); menu.add(new JMenuItem("Action2")); menu.add(new JCheckBoxMenuItem("check this")); } public boolean isValid(TreePath[] selection) { //We said it could be visible only with rasters // and only if there is one selected if (selection.length == 1) { ContextTreeNode node = (ContextTreeNode) selection[0].getLastPathComponent(); if (node.getUserObject() instanceof MapLayer) { return true; } } return false; } public Component getComponent(TreePath[] selection) { // We can return whatever we want, a classic JMenuItem // or much more complicate components. we could imagine // a JTable or an animated component. there's no limit. return menu; } } return new ActionItem(); }
The JContextTreePopup works with TreePopupItem.
Each TreePopupItem is a component that might be visible in the final JPopupMenu but only if the condition described in the TreePopupItem are met.

