Java Reference
In-Depth Information
boolean isLeaf() , which provides the answer you're looking for. The class definition for a
leaf node cell editor is shown in Listing 17-8.
Listing 17-8. Tree Cell Editor for Leaf Nodes
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.util.EventObject;
public class LeafCellEditor extends DefaultTreeCellEditor {
public LeafCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
super(tree, renderer);
}
public LeafCellEditor(JTree tree, DefaultTreeCellRenderer renderer,
TreeCellEditor editor) {
super(tree, renderer, editor);
}
public boolean isCellEditable(EventObject event) {
// Get initial setting
boolean returnValue = super.isCellEditable(event);
// If still possible, check if current tree node is a leaf
if (returnValue) {
Object node = tree.getLastSelectedPathComponent();
if ((node != null) && (node instanceof TreeNode)) {
TreeNode treeNode = (TreeNode)node;
returnValue = treeNode.isLeaf();
}
}
return returnValue;
}
}
You use the LeafCellEditor in the same way as a DefaultTreeCellRenderer . It requires a
JTree and DefaultTreeCellRenderer for its constructor. In addition, it supports an optional
TreeCellEditor . If one isn't provided, a JTextField is used as the editor.
JTree tree = new JTree();
tree.setEditable(true);
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
TreeCellEditor editor = new LeafCellEditor(tree, renderer);
tree.setCellEditor(editor);
Search WWH ::




Custom Search