Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JTreeのイベント

はじめまして。初心者です。

JTreeでツリーを表示してWindowsのエクスプローラのように、直接ツリー上でフォルダ名称を変更するプログラムを作成したのですが、
変更したフォルダ名称が同じ階層のフォルダとバッティングしていた場合エラーを出したいのですが、
フォルダ名称変更直後のイベントを拾う方法がわかりません。
フォルダ名称を確定させた直後にイベントを取得する方法はあるのでしょうか?

ちなみに、
JTree tree = new JTree();
tree.setEditable(true);
tree.startEditingAtPath(tree.getSelectionPath());

上記メソッドで編集可能にしています。

どなたかご教授いただけないでしょうか。お願いいたします。

5

回答

5015

閲覧

5件の回答

評価

0

使ったことはないんですが。

addTreeSelectionListener(TreeSelectionListener tsl)

これじゃないでしょうか。

評価

0

早速の解答ありがとうございます。
試してみましたが、残念ながら拾えませんでした。
この変更イベント拾えないとあんまり使えなそうですね。。。

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

public class SampleTest extends JFrame{

    
    private JTree tree = new JTree();
    
    public static void main(String[] args){
        SampleTest t = new SampleTest();
        t.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){System.exit(0);}
    });
    }
    
    public SampleTest(){
        this.getContentPane().add(tree);
        this.setBounds( 10, 10, 300, 200);
        this.setVisible(true);
        
        tree.addMouseListener(new menu_Click(this));
        menu_Select ms = new menu_Select(tree);
        tree.addTreeSelectionListener(ms);
    }
    
    public void menu_click(MouseEvent e){
    
        if(e.isPopupTrigger()){
            System.out.println("right_Click");
            tree.setEditable(true);
            tree.startEditingAtPath(tree.getSelectionPath());
        }
    }
}
class menu_Select implements TreeSelectionListener{
    
    JTree tree = null;
    
    public menu_Select(JTree _tree){
        tree = _tree;
    }
    public void valueChanged(TreeSelectionEvent e){
        System.out.println(tree.getSelectionPath());
    }
}
class menu_Click extends MouseAdapter{
    
    SampleTest st;
    public menu_Click(SampleTest _st){
        st = _st;
    }
    public void mouseReleased(MouseEvent e){
        st.menu_click(e);
    }
}

評価

0

http://www.java2s.com/ExampleCode/Swing-JFC/Buildatreeandpopulateitwithcustomrenderersandeditors.htm

ちょっとやっかいですが、ここのサンプルが良さそうな気がします。
TreeCellEditorを継承したクラスを作って、それでイベントを拾える気がします。
考えてみれば、値の変更はツリー全体の問題というよりは、ノードの問題ですね…。

評価

0

TreeCellEditorを継承→実装

評価

0

mio様
とりあえず、コピペして動かして見たところ何とかイベントは取れているようです。ありがとうございます!!!

確かにこのサンプルは使えるものばかりで非常に助かりました。

いろいろ試して結果はまた報告させていただきます。
ありがとうございました!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。