• category: swing folder: LeafTreeCellEditor title: JTreeの葉ノードだけ編集可能にする tags: [JTree, TreeCellEditor, TreeNode] author: aterai pubdate: 2010-04-12T18:23:41+09:00 description: JTreeのノードラベル編集が、葉ノードの場合だけ可能になるよう設定します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTPB-TVk9I/AAAAAAAAAdU/Aq5YDSMvqaY/s800/LeafTreeCellEditor.png

概要

JTreeのノードラベル編集が、葉ノードの場合だけ可能になるよう設定します。

サンプルコード

class LeafTreeCellEditor extends DefaultTreeCellEditor {
  protected LeafTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
    super(tree, renderer);
  }
#spanadd

#spanend
  @Override public boolean isCellEditable(EventObject e) {
    Object o = tree.getLastSelectedPathComponent();
    if (super.isCellEditable(e) && o instanceof TreeNode) {
      return ((TreeNode) o).isLeaf();
    } else {
      return false;
    }
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、CellEditor#isCellEditable(...)メソッドをオーバーライドし、葉ノードの場合だけ編集が可能にしたセルエディタを作成し、これをJTree#setCellEditor(...)で設定しています。 上記のサンプルでは、CellEditor#isCellEditable(...)メソッドをオーバーライドして葉ノードのみ編集が可能にしたセルエディタを作成し、これを以下のようにJTree#setCellEditor(...)メソッドで設定しています。
#spandel
tree.setCellEditor(new LeafTreeCellEditor(tree, (DefaultTreeCellRenderer) tree.getCellRenderer()));
#spanend
#spanadd
tree.setCellEditor(
#spanend
  new LeafTreeCellEditor(tree, (DefaultTreeCellRenderer) tree.getCellRenderer()));

参考リンク

コメント