• ベストアンサー

jtreeのノードを右クリックで選択する方法

JTreeを使ってノードを複数作成し、ノードごとに文字列を入れる。 右クリックを押すとポップアップメニューが表示され、"表示"というメニューアイテムだけ表示される。 メニューアイテムの"表示"を押すとjtreeの下に用意されたjlabelにノードに入れられている文字列が表示される。 といったプログラムを作成しているのですが現在ノードの選択は左クリックでしか行う事ができません。 各ノードの上で右クリックで押すとノードの選択とポップアップの表示を同時に行えるようにしたいのですが どのようにすれば実現できるのかわかりません。 よろしければどなたかご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • koki_m
  • ベストアンサー率83% (45/54)
回答No.1

こんばんは。このような流れで出来ると思います。 1.ポップアップメニューを作成 2.JTreeコンポーネント上のマウスイベント処理(マウスリスナー)を追加 2-1.マウスの右クリック判定 2-2.マウスクリックの位置からJTreeのノードを判定 2-3.2-2で判定したノード(行)を選択 2-4.ポップアップメニューを表示 3.ポップアップメニュー選択時の処理を追加 1、2-1は@IT:JavaTipsに記事があります。 http://www.atmarkit.co.jp/fjava/javatips/137java027.html 2-2、2-3は、APIガイド、JTreeのページに記載されています。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/JTree.html - - - - - import java.awt.event.*; import javax.swing.*; public class Test01 extends JFrame { public static void main(String[] args) { new Test01(); } JTree tree; JPopupMenu menu; JMenuItem mi; public Test01() { super("Test01"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 300); // ポップアップメニュー作成 (1) menu = new JPopupMenu(); mi = new JMenuItem("表示"); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { print(); } }); menu.add(mi); // ツリー作成 String[] list = {"Apple", "Orange", "Grape"}; tree = new JTree(list); // マウスアダプターの実装 (2) MouseListener ml = new MouseAdapter() { public void mousePressed(MouseEvent e) { if(SwingUtilities.isRightMouseButton(e)) { // (2-1) int selRow = tree.getRowForLocation(e.getX(), e.getY()); // (2-2) if(selRow != -1) { tree.setSelectionRow(selRow); // (2-3) menu.show(e.getComponent(), e.getX(), e.getY()); // (2-4) } } } }; tree.addMouseListener(ml); getContentPane().add(tree); setVisible(true); } // ポップアップメニュー選択時の処理 (3) private void print() { System.out.println(tree.getLastSelectedPathComponent()); } }

akisu12345
質問者

お礼

ありがとうございます! 無事に書き上げる事ができました。 getRowForLocationで行を取ってこれるんですね、 自分はisPopupTriggerを使って右クリックの判定をしていたので isRightMouseButtonといったメソッドも知る事ができ、勉強になりました。 本当にどうもありがとうございました。