
JTreeを使ってノードを複数作成し、ノードごとに文字列を入れる。
右クリックを押すとポップアップメニューが表示され、"表示"というメニューアイテムだけ表示される。
メニューアイテムの"表示"を押すとjtreeの下に用意されたjlabelにノードに入れられている文字列が表示される。
といったプログラムを作成しているのですが現在ノードの選択は左クリックでしか行う事ができません。
各ノードの上で右クリックで押すとノードの選択とポップアップの表示を同時に行えるようにしたいのですが
どのようにすれば実現できるのかわかりません。
よろしければどなたかご教授お願いします。
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/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());
}
}
ありがとうございます!
無事に書き上げる事ができました。
getRowForLocationで行を取ってこれるんですね、
自分はisPopupTriggerを使って右クリックの判定をしていたので
isRightMouseButtonといったメソッドも知る事ができ、勉強になりました。
本当にどうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleログインボタンのデザイ...
-
JDONWROADER2のエラー修復
-
googleスプレッドシートのGASに...
-
ゲーム開発の入門書を探しています
-
jdk17.06のインストーラーが起...
-
「main メソッドを持つクラスが...
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
jdbcでinsert,delete,createをe...
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
鍵盤アプリで、スマホの画面に...
-
iText セル内での自動改行について
-
【jQuery】MixltUPの複数フィル...
-
こんばんは。 メガメニューを今...
-
アコーディオンメニューにする...
-
Nivo Sliderのカスタマイズにつ...
-
或る文字列の文字数が一定数以...
-
(再質問)エクセルのマクロボ...
-
汎用機のJCLの入門書ありま...
-
collection型を引数にしたファ...
-
コンソール画面のクリアの方法
-
JavaScriptでチャート図を書き...
-
XPath指定方法について(phpで)
-
timeSetEventに対するtimeKillE...
-
エクセル マクロ 複数のhtml...
-
<p> </p>ってまずいの?
-
Progateの入力画面で使えるショ...
-
Internet Explor...
-
プログラミング
-
Googleコンソールでサイトマッ...
おすすめ情報