Jtree的使用方法-swing 一共很多个例子--添加节点--先序遍历

来源:互联网 发布:淘宝待收货订单生成器 编辑:程序博客网 时间:2024/05/22 19:03

1

package com.wanju.chat.test.tree;import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;public class ExampleFrame_01 extends JFrame {public static void main(String args[]) {ExampleFrame_01 frame = new ExampleFrame_01();frame.setVisible(true);}public ExampleFrame_01() {super();setTitle("简单的树");setBounds(100, 100, 500, 375);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");// 创建根节点DefaultMutableTreeNode nodeFirst = new DefaultMutableTreeNode("一级子节点A");// 创建一级节点root.add(nodeFirst);// 将一级节点添加到根节点DefaultMutableTreeNode nodeSecond = new DefaultMutableTreeNode("二级子节点",false);// 创建不允许有子节点的二级节点nodeFirst.add(nodeSecond);// 将二级节点添加到一级节点root.add(new DefaultMutableTreeNode("一级子节点B"));// 创建一级节点JTree treeRoot = new JTree(root);// 利用根节点直接创建树getContentPane().add(treeRoot, BorderLayout.WEST);DefaultTreeModel treeModelDefault = new DefaultTreeModel(root);// 利用根节点创建树模型,采用默认的判断方式JTree treeDefault = new JTree(treeModelDefault);// 利用树模型创建树getContentPane().add(treeDefault, BorderLayout.CENTER);DefaultTreeModel treeModelPointed = new DefaultTreeModel(root, true);// 利用根节点创建树模型,并采用非默认的判断方式JTree treePointed = new JTree(treeModelPointed);// 利用树模型创建树getContentPane().add(treePointed, BorderLayout.EAST);//}}


2


package com.wanju.chat.test.tree;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Enumeration;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;public class ExampleFrame_03 extends JFrame {private DefaultMutableTreeNode root;public static void main(String args[]) {ExampleFrame_03 frame = new ExampleFrame_03();frame.setVisible(true);}public ExampleFrame_03() {super();setTitle("遍历树节点");setBounds(100, 100, 290, 260);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);root = new DefaultMutableTreeNode("ROOT");DefaultMutableTreeNode nodeFirstA = new DefaultMutableTreeNode("FirstA");nodeFirstA.add(new DefaultMutableTreeNode("SecondAA"));nodeFirstA.add(new DefaultMutableTreeNode("SecondAB"));root.add(nodeFirstA);DefaultMutableTreeNode nodeFirstB = new DefaultMutableTreeNode("FirstB");root.add(nodeFirstB);DefaultMutableTreeNode nodeFirstC = new DefaultMutableTreeNode("FirstC");nodeFirstC.add(new DefaultMutableTreeNode("SecondCA"));DefaultMutableTreeNode nedeSecondCB = new DefaultMutableTreeNode("SecondCB");nedeSecondCB.add(new DefaultMutableTreeNode("SecondCBA"));nedeSecondCB.add(new DefaultMutableTreeNode("SecondCBB"));nodeFirstC.add(nedeSecondCB);nodeFirstC.add(new DefaultMutableTreeNode("SecondCC"));root.add(nodeFirstC);JTree tree = new JTree(root);getContentPane().add(tree, BorderLayout.CENTER);final JPanel panel = new JPanel();panel.setLayout(new GridLayout(0, 1));getContentPane().add(panel, BorderLayout.EAST);final JButton button = new JButton("按前序遍历节点");button.addActionListener(new ButtonActionListener("按前序遍历"));panel.add(button);final JButton button_1 = new JButton("按后序遍历节点");button_1.addActionListener(new ButtonActionListener("按后序遍历"));panel.add(button_1);final JButton button_2 = new JButton("以广度优先遍历");button_2.addActionListener(new ButtonActionListener("以广度优先遍历"));panel.add(button_2);final JButton button_3 = new JButton("以深度优先遍历");button_3.addActionListener(new ButtonActionListener("以深度优先遍历"));panel.add(button_3);final JButton button_4 = new JButton("遍历直属子节点");button_4.addActionListener(new ButtonActionListener("遍历子节点"));panel.add(button_4);//}private class ButtonActionListener implements ActionListener {private String mode;public ButtonActionListener(String mode) {this.mode = mode;}public void actionPerformed(ActionEvent e) {Enumeration enumeration;// 声明节点枚举对象if (mode.equals("按前序遍历"))enumeration = root.preorderEnumeration(); // 按前序遍历所有树节点else if (mode.equals("按后序遍历"))enumeration = root.postorderEnumeration();// 按后序遍历所有树节点else if (mode.equals("以广度优先遍历"))enumeration = root.breadthFirstEnumeration();// 以广度优先遍历所有树节点else if (mode.equals("以深度优先遍历"))enumeration = root.depthFirstEnumeration(); // 以深度优先遍历所有树节点elseenumeration = root.children(); // 遍历该节点的子节点while (enumeration.hasMoreElements()) {// 遍历节点枚举对象DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration.nextElement();// 获得节点for (int l = 0; l < node.getLevel(); l++) {// 根据节点级别输出占位符System.out.print("----");}System.out.println(node.getUserObject());// 输出节点标签}System.out.println();System.out.println();}}}


3

package com.wanju.chat.test.tree;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextField;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath;public class ExampleFrame_05 extends JFrame {private JTextField textField;private DefaultTreeModel treeModel;private JTree tree;public static void main(String args[]) {ExampleFrame_05 frame = new ExampleFrame_05();frame.setVisible(true);}public ExampleFrame_05() {super();setTitle("维护企业架构");setBounds(100, 100, 500, 375);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JScrollPane scrollPane = new JScrollPane();getContentPane().add(scrollPane, BorderLayout.CENTER);DefaultMutableTreeNode root = new DefaultMutableTreeNode("倾诚爱家");DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode("经理办公室");root.add(nodeA);DefaultMutableTreeNode nodeB = new DefaultMutableTreeNode("人事部");root.add(nodeB);DefaultMutableTreeNode nodeC = new DefaultMutableTreeNode("技术部");root.add(nodeC);nodeC.add(new DefaultMutableTreeNode("网络维护部"));nodeC.add(new DefaultMutableTreeNode("应用开发部"));DefaultMutableTreeNode nodeD = new DefaultMutableTreeNode("服务部");root.add(nodeD);nodeD.add(new DefaultMutableTreeNode("网络服务部"));nodeD.add(new DefaultMutableTreeNode("内勤开发部"));DefaultMutableTreeNode nodeE = new DefaultMutableTreeNode("推广部");root.add(nodeE);treeModel = new DefaultTreeModel(root, true);tree = new JTree(treeModel);tree.setSelectionPath(new TreePath(root));scrollPane.setViewportView(tree);final JPanel panel = new JPanel();getContentPane().add(panel, BorderLayout.SOUTH);final JLabel label = new JLabel();label.setText("名称:");panel.add(label);textField = new JTextField();textField.setColumns(8);textField.setText("测试");panel.add(textField);final JButton addButton = new JButton("添加");addButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {DefaultMutableTreeNode node = new DefaultMutableTreeNode(textField.getText());// 创建欲添加节点TreePath selectionPath = tree.getSelectionPath();// 获得选中的父节点路径DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();// 获得选中的父节点treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount());// 插入节点到所有子节点之后TreePath path = selectionPath.pathByAddingChild(node);// 获得新添加节点的路径if (!tree.isVisible(path))tree.makeVisible(path);// 如果该节点不可见则令其可见}});panel.add(addButton);final JButton updButton = new JButton("修改");updButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {TreePath selectionPath = tree.getSelectionPath();// 获得选中的欲修改节点的路径DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();// 获得选中的欲修改节点node.setUserObject(textField.getText());// 修改节点的用户标签treeModel.nodeChanged(node);// 通知树模型该节点已经被修改tree.setSelectionPath(selectionPath);// 选中被修改的节点}});panel.add(updButton);final JButton delButton = new JButton("删除");delButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();// 获得选中的欲删除节点if (!node.isRoot()) {// 查看欲删除的节点是否为根节点,根节点不允许删除DefaultMutableTreeNode nextSelectedNode = node.getNextSibling();// 获得下一个兄弟节点,以备选中if (nextSelectedNode == null)// 查看是否存在兄弟节点nextSelectedNode = (DefaultMutableTreeNode) node.getParent();// 如果不存在则选中其父节点treeModel.removeNodeFromParent(node);// 删除节点tree.setSelectionPath(new TreePath(nextSelectedNode.getPath()));// 选中节点}}});panel.add(delButton);//}}



5

package com.wanju.chat.test.tree;import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.tree.DefaultMutableTreeNode;public class Answer_2208 extends JFrame {/** * Launch the application *  * @param args */public static void main(String args[]) {try {Answer_2208 frame = new Answer_2208();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}/** * Create the frame */public Answer_2208() {super();setTitle("支持树状结构的下拉菜单");setBounds(100, 100, 500, 375);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);DefaultMutableTreeNode root = new DefaultMutableTreeNode("明日科技");DefaultMutableTreeNode aNode2 = new DefaultMutableTreeNode("人事部");root.add(aNode2);DefaultMutableTreeNode bNode2 = new DefaultMutableTreeNode("开发部");root.add(bNode2);DefaultMutableTreeNode aNode3 = new DefaultMutableTreeNode("VB");bNode2.add(aNode3);DefaultMutableTreeNode bNode3 = new DefaultMutableTreeNode("VC");bNode2.add(bNode3);final JPanel topPanel = new JPanel();getContentPane().add(topPanel, BorderLayout.NORTH);final JLabel topLabel = new JLabel();topLabel.setText("部门:");topPanel.add(topLabel);final MTreeComboBox topTreeComboBox = new MTreeComboBox(root, 10, 1.2);topPanel.add(topTreeComboBox);final JPanel bottomPanel = new JPanel();getContentPane().add(bottomPanel, BorderLayout.SOUTH);final JLabel bottomLabel = new JLabel();bottomLabel.setText("部门:");bottomPanel.add(bottomLabel);final MTreeComboBox bottomTreeComboBox = new MTreeComboBox(root, 20,1.2);bottomPanel.add(bottomTreeComboBox);final JLabel label = new JLabel();label.setText("");getContentPane().add(label, BorderLayout.CENTER);//}}




0 0