Java Swing桌面应用开发-组件-树形结构(JTree)

1:硬编码方式创建Tree

代码实现:

package Swing;
/**
 * 硬编码树型结构:Tree型结构不能改变
 * */

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class Main13 extends JFrame{

	public static void main(String[] args) {
		
		Main13 main13 = new Main13();
		main13.run();
	}

	public void run() {
		//创建root节点
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("国务院");
		//创建子节点
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("交通部");
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("外交部");
		//将子节点添加到root节点
		root.add(node1);
		root.add(node2);
		//创建孙子辈的节点
		DefaultMutableTreeNode S1 = new DefaultMutableTreeNode("陕西交通厅");
		DefaultMutableTreeNode S2 = new DefaultMutableTreeNode("河南交通厅");
		DefaultMutableTreeNode S3 = new DefaultMutableTreeNode("重庆交通局");
		DefaultMutableTreeNode S4 = new DefaultMutableTreeNode("翻译局");
		DefaultMutableTreeNode S5 = new DefaultMutableTreeNode("外事办");
		//同理 添加到其父节点
		node1.add(S1);
		node1.add(S2);
		node1.add(S3);
		node2.add(S4);
		node2.add(S4);
		
		DefaultMutableTreeNode C1 = new DefaultMutableTreeNode("汉中交警支队");
		DefaultMutableTreeNode C2 = new DefaultMutableTreeNode("郑州交管局");
		DefaultMutableTreeNode C3 = new DefaultMutableTreeNode("涪陵交管大队");
		DefaultMutableTreeNode C4 = new DefaultMutableTreeNode("北京翻译局");
		DefaultMutableTreeNode C5 = new DefaultMutableTreeNode("深圳外事办");
		
		S1.add(C1);
		S2.add(C2);
		S3.add(C3);
		S4.add(C4);
		S5.add(C5);
		//绑定root节点
		JTree tree = new JTree(root);
		JScrollPane scrollPane = new JScrollPane(tree);
		scrollPane.setBounds(20, 20, 250, 400);
		
		Container container = this.getContentPane();
		container.add(scrollPane);
		// 设置布局管理器
		this.setLayout(null);
		/**
		 * 设置窗体属性
		 */
		this.setTitle("硬编码树型结构");
		this.setVisible(true);
		this.setSize(500, 500);
		this.setLocationRelativeTo(null);// 设置居中显示
		// 设置Jframe窗体关闭时 程序结束
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

2:动态增加节点

package Swing;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
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 Main14 extends JFrame{
	
	private TreePath path;//path声明为全局变量 方便使用 方便赋值处理
	
	public static void main(String[] args) {
		
		Main14 main14 = new Main14();
		main14.run();
	}

	public void run() {
		
		//创建操作按钮
		JButton AddBtn = new JButton("添加");
		AddBtn.setBounds(400, 20, 65, 30);
		
		JTextField textField = new JTextField();
		textField.setBounds(300, 20, 90, 30);
		
		//创建root节点
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("国务院");
		//绑定root节点
		JTree tree = new JTree(root);
		//设置为单选模式 防止多选 一个textfield添加到多个节点下
		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
		JScrollPane scrollPane = new JScrollPane(tree);
		scrollPane.setBounds(20, 20, 250, 400);
		
		/**
		 * 新增加的节点自动展开的核心代码
		 * */
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			
			@Override
			public void valueChanged(TreeSelectionEvent e) {
				//获取选择的节点的path路径
				path = e.getPath();
				
			}
		});
		
		//对AddBtn添加监听器 
		/**
		 * 动态添加节点 的核心代码
		 * */
		AddBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String context = textField.getText();//获取文本框文本内容
				
				DefaultMutableTreeNode temp = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
				//将获取到的内容添加到temp节点下
				temp.add(new DefaultMutableTreeNode(context));
				//自动展开新添加的节点 目的是更好的用户体验
				tree.expandPath(path);
				//刷新Tree
				tree.updateUI();
				textField.setText("");//清空textField
			}
		});
		
		Container container = this.getContentPane();
		container.add(scrollPane);
		container.add(AddBtn);
		container.add(textField);
		// 设置布局管理器
		this.setLayout(null);
		/**
		 * 设置窗体属性
		 */
		this.setTitle("动态添加Tree型结构-自由设置国务院的组织架构");
		this.setVisible(true);
		this.setSize(500, 500);
		this.setLocationRelativeTo(null);// 设置居中显示
		// 设置Jframe窗体关闭时 程序结束
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

3:节点的修改

package Swing;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
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 Main14 extends JFrame{
	
	private TreePath path;//path声明为全局变量 方便使用 方便赋值处理
	DefaultMutableTreeNode temp;
	
	public static void main(String[] args) {
		
		Main14 main14 = new Main14();
		main14.run();
	}

	public void run() {
		
		//创建操作按钮
		JButton AddBtn = new JButton("添加");
		AddBtn.setBounds(400, 20, 65, 30);
		
		JTextField textField = new JTextField();
		textField.setBounds(300, 20, 90, 30);
		
		//创建修改按钮
		JButton ChangeBtn = new JButton("修改");
		ChangeBtn.setBounds(400, 80, 65, 30);
		
		JTextField textedField = new JTextField();
		textedField.setBounds(300, 80, 90, 30);
		
		//创建root节点
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("国务院");
		//绑定root节点
		JTree tree = new JTree(root);
		//设置为单选模式 防止多选 一个textfield添加到多个节点下
		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
		JScrollPane scrollPane = new JScrollPane(tree);
		scrollPane.setBounds(20, 20, 250, 400);
		
		/**
		 * 新增加的节点自动展开的核心代码
		 * */
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			
			@Override
			public void valueChanged(TreeSelectionEvent e) {
				//获取选择的节点的path路径
				path = e.getPath();
				
			}
		});
		
		//对AddBtn添加监听器 
		/**
		 * 动态添加节点 的核心代码
		 * */
		AddBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String context = textField.getText();//获取文本框文本内容
				
				temp = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
				//将获取到的内容添加到temp节点下
				temp.add(new DefaultMutableTreeNode(context));
				//自动展开新添加的节点 目的是更好的用户体验
				tree.expandPath(path);
				//刷新Tree
				tree.updateUI();
				textField.setText("");//清空textField
			}
		});
		
		/**
		 * 修改节点名称操作的核心代码
		 * */
		ChangeBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				temp = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
				/**
				 * 对text文本输入框的判断
				 * */
				if(temp == null){
					
					System.out.println("请选择节点");
					return;
				}
				
				String text = textedField.getText();
				
				if(text.equals("")){
					
					System.out.println("请输入需要修改的文本");
					return;
				}
				
				/**
				 * 修改操作
				 * */
				temp.setUserObject(text);//修改temp节点的名称
				tree.updateUI();//刷新tree
				textedField.setText("");//设置textedfield文本内容为null
			}
		});
		
		Container container = this.getContentPane();
		container.add(scrollPane);
		container.add(AddBtn);
		container.add(textField);
		container.add(ChangeBtn);
		container.add(textedField);
		// 设置布局管理器
		this.setLayout(null);
		/**
		 * 设置窗体属性
		 */
		this.setTitle("动态添加Tree型结构-自由设置国务院的组织架构");
		this.setVisible(true);
		this.setSize(500, 500);
		this.setLocationRelativeTo(null);// 设置居中显示
		// 设置Jframe窗体关闭时 程序结束
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

4:删除节点的操作

package Swing;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
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 Main14 extends JFrame{
	
	private TreePath path;//path声明为全局变量 方便使用 方便赋值处理
	DefaultMutableTreeNode temp;
	
	public static void main(String[] args) {
		
		Main14 main14 = new Main14();
		main14.run();
	}

	public void run() {
		
		//创建操作按钮
		JButton AddBtn = new JButton("添加");
		AddBtn.setBounds(400, 20, 65, 30);
		
		JTextField textField = new JTextField();
		textField.setBounds(300, 20, 90, 30);
		
		//创建删除按钮
		JButton DelBtn = new JButton("删除");
		DelBtn.setBounds(400, 80, 65, 30);
		
		//创建root节点
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("国务院");
		//绑定root节点
		JTree tree = new JTree(root);
		//设置为单选模式 防止多选 一个textfield添加到多个节点下
		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
		JScrollPane scrollPane = new JScrollPane(tree);
		scrollPane.setBounds(20, 20, 250, 400);
		
		/**
		 * 新增加的节点自动展开的核心代码
		 * */
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			
			@Override
			public void valueChanged(TreeSelectionEvent e) {
				//获取选择的节点的path路径
				path = e.getPath();
				
			}
		});
		
		//对AddBtn添加监听器 
		/**
		 * 动态添加节点 的核心代码
		 * */
		AddBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String context = textField.getText();//获取文本框文本内容
				
				temp = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
				//将获取到的内容添加到temp节点下
				temp.add(new DefaultMutableTreeNode(context));
				//自动展开新添加的节点 目的是更好的用户体验
				tree.expandPath(path);
				//刷新Tree
				tree.updateUI();
				textField.setText("");//清空textField
			}
		});
		
		/**
		 * 删除节点名称操作的核心代码
		 * */
		DelBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				temp = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
				
				if(temp.isRoot()){
					
					System.out.println("Root节点不允许删除");
					return;
				}
				//删除节点的操作
				temp.removeFromParent();
				tree.updateUI();//刷新tree
			}
		});
		
		Container container = this.getContentPane();
		container.add(scrollPane);
		container.add(AddBtn);
		container.add(textField);
		container.add(DelBtn);
		// 设置布局管理器
		this.setLayout(null);
		/**
		 * 设置窗体属性
		 */
		this.setTitle("动态添加Tree型结构-自由设置国务院的组织架构");
		this.setVisible(true);
		this.setSize(500, 500);
		this.setLocationRelativeTo(null);// 设置居中显示
		// 设置Jframe窗体关闭时 程序结束
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

 

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值