概要

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

サンプルコード

static class TreePopupMenu extends JPopupMenu {
  private TreePath[] tsp;
  public TreePopupMenu() {
    super();
    add(new AbstractAction("path") {
      @Override public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(
          null, tsp, "path", JOptionPane.INFORMATION_MESSAGE);
      }
    });
    add(new JMenuItem("dummy"));
  }
  @Override public void show(Component c, int x, int y) {
    JTree tree = (JTree) c;
    tsp = tree.getSelectionPaths();
    TreePath path = tree.getPathForLocation(x, y);
    if (path != null && Arrays.asList(tsp).contains(path)) {
      super.show(c, x, y);
    }
  }
}
view all

解説

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

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

コメント