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);
}
}