数(简单的数、处理节点事件、遍历树)(简单代码例子实现)

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

public class Main {
	private static DefaultMutableTreeNode root;

	

	public static void main(String args[]) {


		JFrame f = new JFrame();

		root = new DefaultMutableTreeNode("根节点");
		DefaultMutableTreeNode root1 = new DefaultMutableTreeNode("子节点1");
		DefaultMutableTreeNode root2 = new DefaultMutableTreeNode("子节点2");

		DefaultMutableTreeNode root11 = new DefaultMutableTreeNode("二级子节点11", false);// 创建不许有子节点的二级节点
		DefaultMutableTreeNode root22 = new DefaultMutableTreeNode("二级子节点22");

		root.add(root1);
		root.add(root2);
		root1.add(root11);
		root2.add(root22);

		JTree tree = new JTree(root);
		f.getContentPane().add(tree, BorderLayout.CENTER);

		final JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(0, 1));
		f.getContentPane().add(panel, BorderLayout.EAST);
		final JButton button = new JButton("按前序遍历节点");
		Main m = new Main();
		ButtonActionListener b1 = m.new ButtonActionListener("按前序遍历");
		button.addActionListener(b1);
		panel.add(button);
		
		final JButton button_1 = new JButton("按后序遍历节点");
		ButtonActionListener b2 = m.new ButtonActionListener("按后序遍历");
		button_1.addActionListener(b2);
		panel.add(button_1);
		
		final JButton button_2 = new JButton("以广度优先遍历");
		ButtonActionListener b3 = m.new ButtonActionListener("以广度优先遍历");
		button_2.addActionListener(b3);
		panel.add(button_2);
		
		final JButton button_3 = new JButton("以深度优先遍历");
		ButtonActionListener b4 = m.new ButtonActionListener("以深度优先遍历");
		button_3.addActionListener(b4);
		panel.add(button_3);
		
		final JButton button_4 = new JButton("遍历直属子节点");
		ButtonActionListener b5 = m.new ButtonActionListener("遍历子节点");
		button_4.addActionListener(b5);
		panel.add(button_4);

		TreeSelectionModel model = tree.getSelectionModel();
		model.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);// 单选
		// model.setSelectionMode(TreeSelectionModel.CONTIGUOUS_TREE_SELECTION);//连选
		// model.setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);//多选

		tree.addTreeSelectionListener(new TreeSelectionListener() {

			@Override
			public void valueChanged(TreeSelectionEvent e) {
				JTree t = (JTree) e.getSource();
				if (!t.isSelectionEmpty()) {// 查看是否存在被选中的节点
					TreePath paths[] = t.getSelectionPaths();
					for (TreePath path : paths) {
						// System.out.println(path);
						Object obj[] = path.getPath();// 获得被选中节点的路径
						for (Object boj : obj) {
							System.out.println(boj + " ");
						}
						System.out.println();
					}
				}

			}
		});

//		tree.setRootVisible(false);//不显示根节点
//		tree.setShowsRootHandles(true);//显示根节点小手柄
		
		//定义小手柄图标
//		DefaultTreeCellRenderer render = (DefaultTreeCellRenderer) tree.getCellRenderer();
//		render.setLeafIcon(new ImageIcon("src/a.png"));
//		render.setOpenIcon(new ImageIcon("src/a.png"));
//		render.setClosedIcon(new ImageIcon("src/a.png"));
		
//		tree.putClientProperty("JTree.lineStyle", "None");//不绘制节点间的连线
//		tree.putClientProperty("JTree.lineStyle", "Horizontal");//绘制水平分栏线

		f.setTitle("树");
		f.setSize(800, 600);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
	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;// 获得节点
				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();
		}
	}

}

运行结果:
在这里插入图片描述
button点击:
在这里插入图片描述
点击节点:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值