• ベストアンサー

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

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

  • Java
  • 回答数1
  • ありがとう数5

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

  • ベストアンサー
  • 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といったメソッドも知る事ができ、勉強になりました。 本当にどうもありがとうございました。

関連するQ&A

  • JTreeの+-ボタンについて

    JTreeを使ってウィンドウズエクスプローラーのようなものを作りたいと思っています。 JTreeはノードのテキスト内をクリックしないと選択されませんが、エクスプローラーのツリーはそのノードと同じ高さであればどこをクリックしても選択になります。 それを再現しようと以下のコードを書いてみました。 しかしこれだとツリーのノードの展開、非展開を切り替える+-のボタン?の動作が変になります。 +-ボタン領域をクリックすると展開、非展開切り替えの後で改めてノードを選択、展開になります。 +-ボタン領域をクリックした場合はノード選択の処理に入らないようにすれば良いと思うのですがその+-ボタン領域の計算方法や取得方法が分かりません。 あるいはもっと良い方法を知っている方、是非教えてください。よろしくお願いします。 jTree.addMouseListener(new MouseAdapter() {  public void mouseClicked(MouseEvent e) {   int d = jTree.getRowBounds(0).getBounds().y;   int row = jTree.getRowCount();   int height = jTree.getRowHeight();   int mouse = e.getY() + d;   int selectrow = 0;   if (height > 0) {     selectrow = (int) (mouse / height);   } else {     selectrow = jTree.getRowForLocation(e.getX(), e.getY());   }   if (selectrow < row) {     jTree.setSelectionRow(selectrow);   }   if (SwingUtilities.isRightMouseButton(e)) {     jPopupMenu.show(e.getComponent(), e.getX(), e.getY());   }  } });

    • ベストアンサー
    • Java
  • JTableで右クリック

    JTableで右クリックしたときに、マウスがあるセルを選択し、 ポップアップメニューを表示したいのですが、どうしたらよいでしょう? JTableは右クリックしても、そのセルを選択できないんでしょうか? 困ってます。回答をお願いします。

    • ベストアンサー
    • Java
  • 右クリック有効にさせる方法?

    リンクや画像を右クリックして、ポップアップメニューを出したいのですが、右クリックを有効にさせる方法はあるのでしょうか??

  • 右クリックでポップアップメニューを表示したい

    Visual Basic6.0右クリック時にポップアップメニュー(コンテキストメニュー)を表示したいのですが、Webで調べてもよくわかりませんでした。メニューエディタを使って、メニューを作成することはできましたが、フォームの上段に表示されるメニューしか作成できません。MouseUpイベントを使用して右クリックを判別するところまではわかりましたが、肝心のポップアップメニューのメニューの作り方、使用方法をご存知の方いらっしゃいましたらご回答よろしくお願いします。

  • 範囲選択後右クリックでコピーできません。

    あるホームページの文字列をマウスでドラッグして 範囲選択後右クリックでコピーしたいのですが、 右クリックメニューが出てきません。 もちろん出来るページもあるのですが・・・ IE6の設定を変更するとこの操作ができるようになると 聞いたことがあるのですが、どのように設定を変更すれば良いのでしょうか? どうぞよろしくお願いいたします。

  • PowerPoint2000で右クリックをすると選択が外れる?

    PowerPoint2000で標準表示の状態で、複数のスライドを選択した状態で右クリックをすると選択が外れます? 通常コピーを行なう場合にマウスの右クリックでメニューを出してコピーを行なっているのですが、選択が外れてしまうために複数のスライドをコピーすることができません。 テキストボックスなどのスライド中の文字を選択した場合も同様です。 他のアプリ(Wordやメモ帳)などでは、複数選択後の右クリックではメニューがちゃんと出ます? インターネットでかなり調べたつもりなのですが、有効な情報を見つけることができませんでした? どなたか同じ現象を解決した方はいるでしょうか?

  • VBA、右クリックをするとフリーズしてしまう。

    Excel で、 Workbook_SheetActivate() を使ったマクロを組みました。 各 Sheet のタブを選択して表示するごとに、 マクロが実行されます。 難を言えば、 Application.ScreenUpdating で高速処理をしても、 レスポンスに1秒弱ほどかかります。 問題は、右クリックでタブを選択すると、 フリーズしてしまうのです。 ご存知のように、タブ上で右クリックは、 新規 Sheet 作成などのポップアップメニューが出るのですが、 選択した Sheet が表示され、それが出た段階で、 Excel自体がフリーズいてしまいます。 問題を解決するには、 どうすればいいのか分かる方いませんか?

  • TreeViewのノードを選択 右メニュー変更

    こんにちは。添付画像にあるような事をしたいと思っています。 左側のメニューはtreeviewコントロールで作られていると思います。ツリーの各ノードを選択すると、右側の領域が変更されるようにしたいと思っているのですが、どういった方法を使えば実現できるのかお教え頂けませんでしょうか? コントロールを色々調べてみたのですが、該当するものがありませんでした。よろしくお願いいたします!

  • 右クリックからのポップアップメニューに機能追加

    ある特定のファイルの右クリックからのポップアップメニューの一番上に 「SEND TO」と同じ機能をつけたいのですが、 エクスプローラの『表示』-『オプション』-『ファイルの種類』- 『編集』の 『アクション』の『追加』からどのように書けば実現できるでしょうか? やりたい事はそのファイルのコピーを 特定のフォルダに送るということです。 現在ポップアップのデフォルトの「送る」からは実現できているのですが そのファイルは特定のフォルダに送らないと実行できないので できればポップアップの一番上の行をワンクリックする事で 特定フォルダに「送る」を実現させたいのですが・・・ 何かご存知の方情報お願いします。

  • 右クリックができない?

    vistaで突然次のような問題が発生することがあります。 1.右クリックが無視される。または一部しかポップアップメニューが表示されない。 2.メニューバーなどをクリックしてもプルダウンメニューが出ない。しかし「ファイル」が反応しなくても「編集」なら反応することなどがある。 3.IEで新しいタブを開けない。すでに開いているものなら普通に動く。 4.IEで新しいタブ、ウィンドウを開いてもずっと「接続中」でいくら待ってもwebページが表示されない。すでに開いているタブなら普通に動く。 5.IEのツールバー、メニューバーが表示されない。 6.新しいウィンドウが開けない。 1,2,6はIE以外でも発生します。 再起動すれば直るのですが発生させないようにはできないでしょうか?

専門家に質問してみよう