
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で質問しましょう!
似たような質問が見つかりました
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- Windows Me・NT・2000 IMEオプションが開かない 2 2023/04/07 18:04
- その他(Microsoft Office) EXCELでバーコードを作成すると白くなってコードが見えません 1 2022/04/04 14:24
- Excel(エクセル) EXCELピボットテーブル(複数アイテム) 1 2023/04/27 12:15
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- Excel(エクセル) 【Excel】hyperlink関数を解除してもハイパーリンクが活きるようにできますか? 3 2023/05/22 11:22
- ノートパソコン Onlineエクセルで右クリックが使えない 1 2023/07/01 22:07
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- Photoshop(フォトショップ) 写真に日付を入れるのがそんなに大変か 9 2023/07/22 14:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleログインボタンのデザイ...
-
JDONWROADER2のエラー修復
-
jdk17.06のインストーラーが起...
-
プログラミングの問題です。大...
-
正規表現について質問です。 カ...
-
「main メソッドを持つクラスが...
-
eclipse実行ができない
-
配列にnullを代入すると、null...
-
googleスプレッドシートのGASに...
-
jdbcでinsert,delete,createをe...
-
えハミルトン路と全域木のちが...
-
問題作成のWebアプリの作り方を...
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iText セル内での自動改行について
-
アコーディオンメニューにする...
-
Aタグのhrefの値を取得したいの...
-
こんばんは。 メガメニューを今...
-
jtreeのノードを右クリックで選...
-
或る文字列の文字数が一定数以...
-
jQueryについて
-
javaがわかりません。。。
-
鍵盤アプリで、スマホの画面に...
-
URL+URN=URI と習ったのですが...
-
Listでintの最大値を超える要素...
-
ノードの削除2
-
Preorder Tree Walkとは
-
innerTextは標準化されているの...
-
JTextAreaを改行コードを直接書...
-
(再質問)エクセルのマクロボ...
-
collection型を引数にしたファ...
-
コンソール画面のクリアの方法
-
mとnを入力 mからnまでを加算し...
-
Google SketchUpのポータブル版...
おすすめ情報