⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genealogymodel.java

📁 Java C/S 结构中的树结构源代码Demo.
💻 JAVA
字号:
/* * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *   - Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. * *   - Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the *     documentation and/or other materials provided with the distribution. * *   - Neither the name of Sun Microsystems nor the names of its *     contributors may be used to endorse or promote products derived *     from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package components;import javax.swing.event.TreeModelEvent;import javax.swing.event.TreeModelListener;import javax.swing.tree.TreeModel;import javax.swing.tree.TreePath;import java.util.Vector;public class GenealogyModel implements TreeModel {    private boolean showAncestors;    private Vector<TreeModelListener> treeModelListeners =        new Vector<TreeModelListener>();    private Person rootPerson;    public GenealogyModel(Person root) {        showAncestors = false;        rootPerson = root;    }    /**     * Used to toggle between show ancestors/show descendant and     * to change the root of the tree.     */    public void showAncestor(boolean b, Object newRoot) {        showAncestors = b;        Person oldRoot = rootPerson;        if (newRoot != null) {           rootPerson = (Person)newRoot;        }        fireTreeStructureChanged(oldRoot);    }//////////////// Fire events //////////////////////////////////////////////    /**     * The only event raised by this model is TreeStructureChanged with the     * root as path, i.e. the whole tree has changed.     */    protected void fireTreeStructureChanged(Person oldRoot) {        int len = treeModelListeners.size();        TreeModelEvent e = new TreeModelEvent(this,                                               new Object[] {oldRoot});        for (TreeModelListener tml : treeModelListeners) {            tml.treeStructureChanged(e);        }    }//////////////// TreeModel interface implementation ///////////////////////    /**     * Adds a listener for the TreeModelEvent posted after the tree changes.     */    public void addTreeModelListener(TreeModelListener l) {        treeModelListeners.addElement(l);    }    /**     * Returns the child of parent at index index in the parent's child array.     */    public Object getChild(Object parent, int index) {        Person p = (Person)parent;        if (showAncestors) {            if ((index > 0) && (p.getFather() != null)) {                return p.getMother();            }            return p.getFather();        }        return p.getChildAt(index);    }    /**     * Returns the number of children of parent.     */    public int getChildCount(Object parent) {        Person p = (Person)parent;        if (showAncestors) {            int count = 0;            if (p.getFather() != null) {                 count++;            }            if (p.getMother() != null) {                 count++;            }            return count;        }        return p.getChildCount();    }    /**     * Returns the index of child in parent.     */    public int getIndexOfChild(Object parent, Object child) {        Person p = (Person)parent;        if (showAncestors) {            int count = 0;            Person father = p.getFather();            if (father != null) {                count++;                if (father == child) {                    return 0;                }            }            if (p.getMother() != child) {                return count;            }            return -1;        }        return p.getIndexOfChild((Person)child);    }    /**     * Returns the root of the tree.     */    public Object getRoot() {        return rootPerson;    }    /**     * Returns true if node is a leaf.     */    public boolean isLeaf(Object node) {        Person p = (Person)node;        if (showAncestors) {            return ((p.getFather() == null)                 && (p.getMother() == null));        }        return p.getChildCount() == 0;    }    /**     * Removes a listener previously added with addTreeModelListener().     */    public void removeTreeModelListener(TreeModelListener l) {        treeModelListeners.removeElement(l);    }    /**     * Messaged when the user has altered the value for the item     * identified by path to newValue.  Not used by this model.     */    public void valueForPathChanged(TreePath path, Object newValue) {        System.out.println("*** valueForPathChanged : "                           + path + " --> " + newValue);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -