DynamicTreeDemo

来源:互联网 发布:女程序员物品 编辑:程序博客网 时间:2024/06/08 20:16

import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.tree.DefaultMutableTreeNode;public class DynamicTreeDemo extends JPanel implements ActionListener{    private int newNodeSuffix = 1;    private static String ADD_COMMAND = "add";    private static String REMOVE_COMMAND = "remove";    private static String CLEAR_COMMAND = "clear";    private static String RENAME_COMMAND = "rename";            private DynamicTree treePanel;    public DynamicTreeDemo()    {        super(new BorderLayout());                // create the components.        treePanel = new DynamicTree();        populateTree(treePanel);                JButton addButton = new JButton("Add");        addButton.setActionCommand(ADD_COMMAND);        addButton.addActionListener(this);                JButton removeButton = new JButton("Remove");        removeButton.setActionCommand(REMOVE_COMMAND);        removeButton.addActionListener(this);                JButton clearButton = new JButton("Clear");        clearButton.setActionCommand(CLEAR_COMMAND);        clearButton.addActionListener(this);                JButton renameButton = new JButton("Rename");        removeButton.setActionCommand(RENAME_COMMAND);        renameButton.addActionListener(this);                treePanel.setPreferredSize(new Dimension(300,150));        add(treePanel,BorderLayout.CENTER);                JPanel panel = new JPanel(new GridLayout(0,4));        panel.add(addButton);        panel.add(removeButton);        panel.add(renameButton);        panel.add(clearButton);        add(panel,BorderLayout.SOUTH);    }    public void populateTree(DynamicTree treePanel)    {        String p1Name = new String("Parent 1");        String p2Name = new String("Parent 2");        String c1Name = new String("Child 1");        String c2Name = new String("Child 2");                DefaultMutableTreeNode p1,p2;        p1 = treePanel.addObject(null,p1Name);        p2 = treePanel.addObject(null,p2Name);                treePanel.addObject(p1,c1Name);        treePanel.addObject(p1,c2Name);                treePanel.addObject(p2,c1Name);        treePanel.addObject(p2,c2Name);    }    @Override    public void actionPerformed(ActionEvent e)    {        String command = e.getActionCommand();        if (ADD_COMMAND.equals(command)) {            treePanel.addObject("New Node" + newNodeSuffix++);        }else if (REMOVE_COMMAND.equals(command)) {            treePanel.removeCurrentNode();        } else if (CLEAR_COMMAND.equals(command)) {            treePanel.clear();        } else if ((RENAME_COMMAND).equals(command)) {            treePanel.rename();        }    }    private static void createAndShowGUI() {        JFrame frame = new JFrame("DynamicTreeDemo");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                DynamicTreeDemo newContentPane = new DynamicTreeDemo();        newContentPane.setOpaque(true); //content panes must be opaque        frame.setContentPane(newContentPane);                frame.pack();        frame.setVisible(true);    }    public static void main(String[] args)    {        javax.swing.SwingUtilities.invokeLater(new Runnable(){            @Override            public void run()            {                createAndShowGUI();            }                    });    }}

import java.awt.GridLayout;import java.awt.Toolkit;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.event.TreeModelEvent;import javax.swing.event.TreeModelListener;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.MutableTreeNode;import javax.swing.tree.TreePath;import javax.swing.tree.TreeSelectionModel;public class DynamicTree extends JPanel{    /**     *      */    private static final long serialVersionUID = -807408453466014994L;    protected DefaultMutableTreeNode rootNode;    protected DefaultTreeModel treeModel;    protected JTree tree;    private Toolkit toolkit = Toolkit.getDefaultToolkit();    public DynamicTree()    {        super(new GridLayout(1, 0));        rootNode = new DefaultMutableTreeNode("Root Node");        treeModel = new DefaultTreeModel(rootNode);        treeModel.addTreeModelListener(new MyTreeModelListener());        tree = new JTree(treeModel);        tree.setEditable(true);        tree.getSelectionModel().setSelectionMode(                TreeSelectionModel.SINGLE_TREE_SELECTION);        tree.setShowsRootHandles(true);        JScrollPane scrollPane = new JScrollPane(tree);        add(scrollPane);    }    /**     * remove all children     */    public void clear()    {        rootNode.removeAllChildren();        treeModel.reload();    }        public void rename() {        TreePath currentSelection = tree.getSelectionPath();        if (currentSelection != null){            DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection                    .getLastPathComponent());            currentNode.setUserObject(currentNode.toString());        }    }    public void removeCurrentNode()    {        TreePath currentSelection = tree.getSelectionPath();        if (currentSelection != null)        {            DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection                    .getLastPathComponent());            MutableTreeNode parent = (MutableTreeNode) (currentNode.getParent());            if (parent != null)            {                treeModel.removeNodeFromParent(currentNode);                return;            }        }        // 没有选中节点,或者选中的是根节点        toolkit.beep();    }    public DefaultMutableTreeNode addObject(Object child)    {        DefaultMutableTreeNode parentNode = null;        TreePath parentPath = tree.getSelectionPath();        if (parentPath == null)        {            parentNode = rootNode;        } else        {            parentNode = (DefaultMutableTreeNode) (parentPath                    .getLastPathComponent());        }        return addObject(parentNode, child, true);    }    public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,            Object child)    {        return addObject(parent, child, false);    }    public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parentNode,            Object child, boolean shouldBeVisible)    {        DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);        if (parentNode == null)        {            parentNode = rootNode;        }        // //It is key to invoke this on the TreeModel, and NOT        // DefaultMutableTreeNode        treeModel.insertNodeInto(childNode, parentNode, parentNode                .getChildCount());        // Make sure the user can see the lovely new node.        if (shouldBeVisible)        {            tree.scrollPathToVisible(new TreePath(childNode.getPath()));        }        return childNode;    }}class MyTreeModelListener implements TreeModelListener{    @Override    public void treeNodesChanged(TreeModelEvent e)    {        DefaultMutableTreeNode node;        node = (DefaultMutableTreeNode) (e.getTreePath().getLastPathComponent());        int index = e.getChildIndices()[0];        System.out.println("The user has finished editing the node.");        System.out.println("New value: " + node.getUserObject());    }    @Override    public void treeNodesInserted(TreeModelEvent e)    {        // TODO Auto-generated method stub    }    @Override    public void treeNodesRemoved(TreeModelEvent e)    {        // TODO Auto-generated method stub    }    @Override    public void treeStructureChanged(TreeModelEvent e)    {        // TODO Auto-generated method stub    }}

原创粉丝点击