publicclassCheckBoxTreeextendsJTree {privatestaticfinallongserialVersionUID=-217950037507321241L;publicCheckBoxTree(TreeModel newModel) {super(newModel);
addCheckingListener();
}privatevoidaddCheckingListener() {
addMouseListener(newMouseAdapter() {
@OverridepublicvoidmousePressed(MouseEvent e) {introw=getRowForLocation(e.getX(), e.getY());
TreePath treePath=getPathForRow(row);if(treePath==null) {return;
}
CheckBoxTreeNode node=((CheckBoxTreeNode) treePath.getLastPathComponent());booleanchecking=!node.isChecked();//如果该节点已被勾选上,则此次将取消勾选;反之,亦反。checkNode(node, checking);
repaint();//重绘整棵树。}//递归地勾选或取消勾选指定节点及其所有下级节点的CheckBox。privatevoidcheckNode(CheckBoxTreeNode node,booleanchecking) {
node.setChecked(checking);if(!node.isLeaf()) {
Enumerationchildren=node.children();while(children.hasMoreElements()) {
checkNode(children.nextElement(), checking);
}
}
}
});
}
}