DynamicTreeDemo

xiaoxiao2021-02-28  177

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     } }
转载请注明原文地址: https://www.6miu.com/read-33331.html

最新回复(0)