Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJTreeの各ノードに右クリックメニューを実装する方法

JTreeJComponentクラスのサブクラスであり、階層構造を持つデータを表示するために使用されるコンポーネントです。ノードの中にさらにノードを追加することで親子関係を表現でき、ツリー内の各要素が1つのノードとして扱われます。また、各ノードは展開・折りたたみ可能です。

JTreeの各ノードに対してマウスの右クリック操作を実装するには、MouseAdapterクラスのmouseReleased()メソッドを使用します。さらに、JPopupMenuクラスのshow()メソッドを呼び出すことで、クリックされたツリーノード上にポップアップメニューを表示できます。

実装例

以下のコードでは、ツリー上で右クリックすると「Delete(削除)」と「Add(追加)」の項目を含むポップアップメニューが表示されるようにしています。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class JTreeRightClickTest extends JFrame {
    public JTreeRightClickTest() {
        DefaultMutableTreeNode root = createNodes();
        JTree tree = new JTree(root);
        final TreePopup treePopup = new TreePopup(tree);
        tree.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                if(e.isPopupTrigger()) {
                    treePopup.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        });
        add(new JScrollPane(tree), BorderLayout.NORTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        setVisible(true);
    }
    public static DefaultMutableTreeNode createNodes() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Technology");
        DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Java");
        DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Python");
        DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("Selenium");
        node1.add(new DefaultMutableTreeNode("Programming Language"));
        node2.add(new DefaultMutableTreeNode("Programming Language"));
        node3.add(new DefaultMutableTreeNode("Testing Framework"));
        root.add(node1);
        root.add(node2);
        root.add(node3);
        return root;
    }
    public static void main(String args[]) {
        new JTreeRightClickTest();
    }
}
class TreePopup extends JPopupMenu {
    public TreePopup(JTree tree) {
        JMenuItem delete = new JMenuItem("Delete");
        JMenuItem add = new JMenuItem("Add");
        delete.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                System.out.println("Delete child");
            }
        });
        add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                System.out.println("Add child");
            }
        });
        add(delete);
        add(new JSeparator());
        add(add);
    }
}

実行結果

このプログラムを実行すると、「Technology」をルートとする階層ツリーが表示され、任意のノード上で右クリックするとポップアップメニューが現れます。

JavaでJTreeの各ノードに右クリックメニューを実装する方法

ポイント解説

  • isPopupTrigger():マウスイベントがポップアップメニューのトリガーかどうかを判定します。OSによって右クリックの挙動が異なるため、このメソッドを使うことでクロスプラットフォーム対応になります。
  • TreePopupクラス:JPopupMenuを継承した独自クラスで、メニュー項目とアクションリスナーをまとめて管理しています。
  • show()メソッド:第1引数にコンポーネント、第2・第3引数に表示位置の座標を指定することで、マウスカーソルの位置にメニューを表示します。
  1. JavaでJPanelのpaintComponent()メソッドを実装する方法をわかりやすく解説

    JPanelはJavaにおける軽量コンテナであり、それ自体は不可視(インビジブル)なコンポーネントとして扱われます。デフォルトのレイアウトにはFlowLayoutが採用されています。JPanelを生成した後は、Containerクラスから継承されたadd()メソッドを呼び出すことで、ボタンやラベルなどの他のコンポーネントをJPanelオブジェクトに自由に追加できます。 paintComponent()メソッドとは このメソッドは、単なる背景色の描画にとどまらず、JPanel上に独自の図形や画像などを描画したい場合に必要となります。paintComponent()メソッドはすでにJPanelクラ

  2. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー