Swing/LeafTreeCellEditor のバックアップの現在との差分(No.1)
TITLE:JTreeの葉ノードだけ編集可能にする
Posted by terai at 2010-04-12
JTreeの葉ノードだけ編集可能にする
JTreeの葉ノードだけ編集可能にします。- category: swing folder: LeafTreeCellEditor title: JTreeの葉ノードだけ編集可能にする tags: [JTree, TreeCellEditor, TreeNode] author: aterai pubdate: 2010-04-12T18:23:41+09:00 description: JTreeのノードラベル編集が、葉ノードの場合だけ可能になるよう設定します。 image:
概要
JTree
のノードラベル編集が、葉ノードの場合だけ可能になるよう設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
class LeafTreeCellEditor extends DefaultTreeCellEditor {
public LeafTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
protected LeafTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
super(tree, renderer);
}
@Override
public boolean isCellEditable(java.util.EventObject e) {
boolean b = super.isCellEditable(e);
#spanadd
#spanend
@Override public boolean isCellEditable(EventObject e) {
Object o = tree.getLastSelectedPathComponent();
if(b && o!=null && o instanceof TreeNode) {
return ((TreeNode)o).isLeaf();
}else{
return b;
if (super.isCellEditable(e) && o instanceof TreeNode) {
return ((TreeNode) o).isLeaf();
} else {
return false;
}
}
}
解説
上記のサンプルでは、CellEditor#isCellEditable メソッドを葉ノードの場合だけ、編集を開始できるようにオーバーライドしたセルエディタを作成、設定しています。解説
上記のサンプルでは、CellEditor#isCellEditable(...)
メソッドをオーバーライドして葉ノードのみ編集が可能にしたセルエディタを作成し、これを以下のようにJTree#setCellEditor(...)
メソッドで設定しています。
#spandel
tree.setCellEditor(new LeafTreeCellEditor(tree, (DefaultTreeCellRenderer)tree.getCellRenderer()));
#spanend
#spanadd
tree.setCellEditor(
#spanend
new LeafTreeCellEditor(tree, (DefaultTreeCellRenderer) tree.getCellRenderer()));
参考リンク
参考リンク
- CellEditor#isCellEditable(EventObject) (Java Platform SE 8)
- Swing - How can I persist all changes I made to these edited leaves and nodes??