以前、TreeNodeの名前が変更されたときにイベントを発生させる方法を尋ねました(ここ)。私の質問は答えられましたが、私は別の問題に遭遇しました。CellEditorListenerのeditingStoppedイベントで編集されているTreeNodeにアクセスする必要があります。これは私がそうしなければならないコードです:
package com.gamecreator;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultTreeCellEditor;
public class CustomCellEditorListener implements CellEditorListener {
public CustomCellEditorListener() {
}
public void editingCanceled(ChangeEvent e) {
}
public void editingStopped(ChangeEvent e) {
DefaultTreeCellEditor editor = (DefaultTreeCellEditor) e.getSource(); //This gives me the error.
CustomTreeNode node = //What do I put here???;
node.getResource().setName((String) node.getUserObject());
//For debugging
System.out.println(node.getResource().getName());
}
}
このエラーが発生します:
スレッド「AWT-EventQueue-0」の例外java.lang.ClassCastException:javax.swing.tree.DefaultTreeCellEditor$1をjavax.swing.tree.DefaultTreeCellEditorにキャストできません
編集:別の試みでは、CustomCellEditorListenerでこのコードを使用しました
public void editingStopped(ChangeEvent e) {
TreePath path = ((CustomTreeCellEditor) e.getSource()).getLastPath(); //This gives me the error.
CustomTreeNode node = (CustomTreeNode) path.getLastPathComponent();
node.getResource().setName((String) node.getUserObject());
//For debugging
System.out.println(node.getResource().getName());
}
そして、CustomTreeCellEditorのこのコード
public TreePath getLastPath() {
return lastPath;
}
私は同じエラーを受け取りました(私はそうなると思っていました)。私が持っているものはうまくいくはずなので、残っている唯一の本当の質問は「なぜエラーが発生し、どうすれば修正できますか?」ですが、誰かがこれを達成するためのより良い方法を持っているなら、私は喜んで耳を傾けます。
編集2:私が達成しようとしていることの小さな例をここで見つけることができます(これはEclipseアーカイブです)。