• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTreeの葉ノードだけ編集可能にする
#navi(../)
RIGHT:Posted by [[terai]] at 2010-04-12
*JTreeの葉ノードだけ編集可能にする [#ja3545ca]
JTreeの葉ノードだけ編集可能にします。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#bc2dfe8c]
#code{{
class LeafTreeCellEditor extends DefaultTreeCellEditor {
  public LeafTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
    super(tree, renderer);
  }
  @Override
  public boolean isCellEditable(java.util.EventObject e) {
    boolean b = super.isCellEditable(e);
    Object o = tree.getLastSelectedPathComponent();
    if(b && o!=null && o instanceof TreeNode) {
      return ((TreeNode)o).isLeaf();
    }else{
      return b;
    }
  }
}
}}

**解説 [#n0670581]
上記のサンプルでは、CellEditor#isCellEditable メソッドを葉ノードの場合だけ、編集を開始できるようにオーバーライドしたセルエディタを作成、設定しています。

#code{{
tree.setCellEditor(new LeafTreeCellEditor(tree, (DefaultTreeCellRenderer)tree.getCellRenderer()));
}}

ルートノードなどの枝ノードは、トリプルクリックしても編集不可になっています。

**参考リンク [#ha42a5fc]
-[[Swing - How can I persist all changes I made to these edited leaves and nodes??>http://forums.sun.com/thread.jspa?threadID=5161819]]

**コメント [#zc7bd3a1]
#comment