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

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(); // 以深度优先遍历所有树节点
			else
				enumeration = 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);
		//
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静山晚风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值