Swing/LeafTreeCellEditor のバックアップの現在との差分(No.7)
- category: swing folder: LeafTreeCellEditor title: JTreeの葉ノードだけ編集可能にする tags: [JTree, TreeCellEditor, TreeNode] author: aterai pubdate: 2010-04-12T18:23:41+09:00 description: JTreeの葉ノードだけ編集可能にします。 description: JTreeのノードラベル編集が、葉ノードの場合だけ可能になるよう設定します。 image:
概要
JTree
の葉ノードだけ編集可能にします。
概要
JTree
のノードラベル編集が、葉ノードの場合だけ可能になるよう設定します。
Screenshot
Advertisement
サンプルコード
サンプルコード
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 instanceof TreeNode) {
return ((TreeNode)o).isLeaf();
}else{
return b;
if (super.isCellEditable(e) && o instanceof TreeNode) {
return ((TreeNode) o).isLeaf();
} else {
return false;
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、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??