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...