package itheima011; import javax.swing.*; import javax.swing.tree.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.nio.file.Path; public class JTreeDemo2 { public static void main(String[] args) { new JTreeDemo2().init(); } JFrame jf=new JFrame("JTree简单演示"); DefaultMutableTreeNode root = new DefaultMutableTreeNode("中国"); DefaultMutableTreeNode hean = new DefaultMutableTreeNode("四川"); DefaultMutableTreeNode hean2 = new DefaultMutableTreeNode("南充"); DefaultMutableTreeNode hean3 = new DefaultMutableTreeNode("泸州"); DefaultMutableTreeNode hean4 = new DefaultMutableTreeNode("安阳"); DefaultMutableTreeNode hean5 = new DefaultMutableTreeNode("林州"); DefaultMutableTreeNode hean6 = new DefaultMutableTreeNode("河南"); DefaultMutableTreeNode hean7 = new DefaultMutableTreeNode("邯郸"); JButton addsibling=new JButton("添加兄弟结点"); JButton addChlid=new JButton("添加子结点"); JButton delete=new JButton("删除当前结点"); JButton edit=new JButton("修改结点"); private void init() { root.add(hean); root.add(hean6); hean.add(hean2); hean.add(hean3); hean6.add(hean4); hean6.add(hean5); hean6.add(hean7); JTree tree=new JTree(root); //创建编辑树 jf.add(tree); tree.setEditable(true); DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); addsibling.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //添加兄弟结点 //获取当前选中节点 DefaultMutableTreeNode selectednode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(selectednode==null){ return; } //获取当前结点的父结点 DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selectednode.getParent(); if(parentNode==null){ return; } //创建新结点 DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("新结点"); //通过父节点添加 int index = parentNode.getIndex(selectednode); model.insertNodeInto(newNode,parentNode,index); // //显示新结点 TreeNode[] pathToRoot = model.getPathToRoot(newNode); TreePath path = (TreePath) new TreePath(pathToRoot); tree.scrollPathToVisible(path); //重绘 tree.updateUI(); } }); addChlid.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //添加子节点 //获取当前选中结点 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(selectedNode==null){ return; } //创建新结点 DefaultMutableTreeNode newNode =new DefaultMutableTreeNode("新结点"); //添加子节点 selectedNode.add(newNode); //显示到当前结点 TreeNode[] pathToRoot = model.getPathToRoot(newNode); TreePath path = new TreePath(pathToRoot); tree.scrollPathToVisible(path); //重绘 tree.updateUI(); } }); delete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(selectedNode!=null || selectedNode.getParent()!=null){ model.removeNodeFromParent(selectedNode); } } }); edit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { TreePath selectionPath = tree.getSelectionPath(); if(selectionPath!=null){ tree.startEditingAtPath(selectionPath); } } }); jf.add(new JScrollPane(tree)); JPanel jPanel=new JPanel(); jPanel.add(addsibling); jPanel.add(addChlid); jPanel.add(delete); jPanel.add(edit); jf.add(jPanel, BorderLayout.SOUTH); jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }