WEB开发网
开发学院软件开发Java 一个简单的CheckBox Tree实现 阅读

一个简单的CheckBox Tree实现

 2009-09-23 00:00:00 来源:WEB开发网   
核心提示: 3. 树此处对JTree进行扩展,创建CheckBoxTree,一个简单的CheckBox Tree实现(3),该类只是为JTree添加了一个MouseListener,以侦听鼠标选中树节点后,简言之,就是先设置树型数据中的勾选标记,如何设置勾选标记,并重绘树

3. 树

此处对JTree进行扩展,创建CheckBoxTree,该类只是为JTree添加了一个MouseListener,以侦听鼠标选中树节点后,如何设置勾选标记,并重绘树。

public class CheckBoxTree extends JTree {
       private static final long serialVersionUID = -217950037507321241L;
       public CheckBoxTree(TreeModel newModel) {
               super(newModel);
               addCheckingListener();
       }
       private void addCheckingListener() {
               addMouseListener(new MouseAdapter() {
                       @Override
                       public void mousePressed(MouseEvent e) {
                               int row = getRowForLocation(e.getX(), e.getY());
                               TreePath treePath = getPathForRow(row);
                               if (treePath == null) {
                                       return;
                               }
                               CheckBoxTreeNode node = ((CheckBoxTreeNode) treePath.getLastPathComponent());
                               boolean checking = !node.isChecked(); // 如果该节点已被勾选上,则此次将取消勾选;反之,亦反。
                               checkNode(node, checking);
                               repaint(); // 重绘整棵树。
                       }
                       // 递归地勾选或取消勾选指定节点及其所有下级节点的CheckBox。
                       private void checkNode(CheckBoxTreeNode node, boolean checking) {
                               node.setChecked(checking);
                               if (!node.isLeaf()) {
                                       Enumeration<CheckBoxTreeNode> children = node.children();
                                       while (children.hasMoreElements()) {
                                               checkNode(children.nextElement(), checking);
                                       }
                               }
                       }
               });
       }
}

上述程序有两个关键点:

1. 设置当前节点及其子节点的勾选标记--checkNode;

2. 重绘树--repaint。调用repaint方法对树进行绘制时,方法TreeCellRenderer.getTreeCellRendererComponent就会被调用,此时程序就会根据checkNode方法设定的isChecked来勾选或取消勾选对应的树节点CheckBox。简言之,就是先设置树型数据中的勾选标记,然后渲染器再根据这些标记来渲染CheckBox。

上一页  1 2 3 

Tags:一个 简单 CheckBox

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接