重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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/137java …
2-2、2-3は、APIガイド、JTreeのページに記載されています。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …

- - - - -
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());
}

}
    • good
    • 0
この回答へのお礼

ありがとうございます!
無事に書き上げる事ができました。

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

お礼日時:2005/12/19 20:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!