概要

JTreeのノード上でクリックした場合のみ、JPopupMenuを表示します。

サンプルコード

class TreePopupMenu extends JPopupMenu {
  protected TreePopupMenu() {
    super();
    add("path").addActionListener(e -> {
      JTree tree = (JTree) getInvoker();
      JOptionPane.showMessageDialog(
        tree, tree.getSelectionPaths(), "path", JOptionPane.INFORMATION_MESSAGE);
    });
    add("dummy");
  }
  @Override public void show(Component c, int x, int y) {
    if (c instanceof JTree) {
      JTree tree = (JTree) c;
      TreePath path = tree.getPathForLocation(x, y);
      if (tree.getSelectionCount() > 0
          && Arrays.asList(tree.getSelectionPaths()).contains(path)) {
        super.show(c, x, y);
      }
    }
  }
}
view all

解説

上記のサンプルでは以下の場合、JPopupMenuを表示しています。

  • JTreeのノードが選択されている
  • 選択されたノード上にカーソルがある

参考リンク

コメント