something like
- Code: Select all
- public interface TreePopupMenuCustomizer {
 public void customizePopupMenu(JTree tree, JPopupMenu popup, TreePath clickingPath);
 }
You guys probably have a lot more code than this, but heres what I got so far at least:
- Code: Select all
- public class TreePopupMenuInstaller extends MouseAdapter {
 private final JTree tree;
 private List<TreePopupMenuCustomizer> treePopupMenuCustomizers;
 public TreePopupMenuInstaller(JTree tree) {
 this.tree = tree;
 this.treePopupMenuCustomizers = new ArrayList<TreePopupMenuCustomizer>();
 }
 public void installListeners() {
 tree.addMouseListener(this);
 tree.addMouseMotionListener(this);
 tree.addMouseWheelListener(this);
 }
 public void uninstallListeners() {
 tree.removeMouseListener(this);
 tree.removeMouseMotionListener(this);
 tree.removeMouseWheelListener(this);
 }
 public boolean addTreePopupMenuCustomizer(TreePopupMenuCustomizer treePopupMenuCustomizer) {
 return treePopupMenuCustomizers.add(treePopupMenuCustomizer);
 }
 @Override
 public void mouseReleased(MouseEvent event) {
 TreePath path = tree.getSelectionPath();
 if (event.isPopupTrigger() && path != null) {
 JidePopupMenu popup = new JidePopupMenu();
 for (TreePopupMenuCustomizer treePopupMenuCustomizer : treePopupMenuCustomizers) {
 treePopupMenuCustomizer.customizePopupMenu(tree, popup, path);
 }
 popup.show(tree, event.getPoint().x, event.getPoint().y);
 }
 }
 }
That way I could standarize the way I add menus (actions) to both tables and trees.
This would probably also be a good idea for JList...

