JTree 添加 , 删除, 修改
package com.swing.demo; import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import javax.swing.CellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath; /**
* tree node 添加 , 删除, 修改
*
* @author Administrator
*
*/
public class JTreeTest implements ActionListener, TreeModelListener {
private JLabel statusLabel = null;
private JTree tree = null;
private DefaultTreeModel treeModel = null;
private String oldNodeName = null; public JTreeTest() {
JFrame frame = new JFrame("JTreeTest 窗体");
Container contentPane = frame.getContentPane(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");
tree = new JTree(root);
tree.addMouseListener(new MyTreeMouseListener());
treeModel = (DefaultTreeModel) tree.getModel();
treeModel.addTreeModelListener(this);
tree.setEditable(true);
tree.getCellEditor().addCellEditorListener(
new MyTreeCellEditorListener());
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(tree); JPanel toolBarPanel = new JPanel();
JButton b = new JButton("新增节点");
b.addActionListener(this);
toolBarPanel.add(b);
b = new JButton("删除节点");
b.addActionListener(this);
toolBarPanel.add(b);
b = new JButton("清除所有节点");
b.addActionListener(this);
toolBarPanel.add(b); statusLabel = new JLabel("Action");
contentPane.add(toolBarPanel, BorderLayout.NORTH);
contentPane.add(scrollPane, BorderLayout.CENTER);
contentPane.add(statusLabel, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
frame.requestFocus();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} // 本方法运行新增、删除、清除所有节点的程序代码.
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("新增节点")) {
DefaultMutableTreeNode parentNode = null;
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点");
newNode.setAllowsChildren(true);
TreePath parentPath = tree.getSelectionPath();
if (parentPath == null) {
return;
}
// 取得新节点的父节点
parentNode = (DefaultMutableTreeNode) (parentPath
.getLastPathComponent()); // 由DefaultTreeModel的insertNodeInto()方法增加新节点
treeModel.insertNodeInto(newNode, parentNode,
parentNode.getChildCount()); // tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。若没加这行则加入的新节点
// 会被 包在文件夹中,你必须自行展开文件夹才看得到。
tree.scrollPathToVisible(new TreePath(newNode.getPath()));
tree.setSelectionPath(new TreePath(newNode.getPath()));
statusLabel.setText("新增节点成功");
}
if (ae.getActionCommand().equals("删除节点")) {
TreePath treepath = tree.getSelectionPath();
if (treepath != null) {
// 下面两行取得选取节点的父节点.
DefaultMutableTreeNode selectionNode = (DefaultMutableTreeNode) treepath
.getLastPathComponent();
TreeNode parent = (TreeNode) selectionNode.getParent();
if (parent != null) {
// 由DefaultTreeModel的removeNodeFromParent()方法删除节点,包含它的子节点。
treeModel.removeNodeFromParent(selectionNode);
statusLabel.setText("删除节点成功");
}
}
}
if (ae.getActionCommand().equals("清除所有节点")) { // 下面一行,由DefaultTreeModel的getRoot()方法取得根节点.
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) treeModel
.getRoot(); // 下面一行删除所有子节点.
rootNode.removeAllChildren(); // 删除完后务必运行DefaultTreeModel的reload()操作,整个Tree的节点才会真正被删除.
treeModel.reload();
statusLabel.setText("清除所有节点成功");
}
} public void treeNodesChanged(TreeModelEvent e) {
TreePath treePath = e.getTreePath();
DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath
.getLastPathComponent();
try {
int[] index = e.getChildIndices();
node = (DefaultMutableTreeNode) node.getChildAt(index[0]);
} catch (NullPointerException exc) {
}
statusLabel.setText(oldNodeName + "更改数据为:"
+ (String) node.getUserObject());
} public static void main(String[] args) {
new JTreeTest();
} class MyTreeMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
try {
JTree tree = (JTree) e.getSource();
int rowLocation = tree.getRowForLocation(e.getX(), e.getY());
TreePath treepath = tree.getPathForRow(rowLocation);
TreeNode treenode = (TreeNode) treepath.getLastPathComponent();
oldNodeName = treenode.toString();
} catch (NullPointerException ne) {
}
}
} class MyTreeCellEditorListener implements CellEditorListener {
public void editingStopped(ChangeEvent e) {
Object selectnode = tree.getLastSelectedPathComponent();
DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectnode;
CellEditor cellEditor = (CellEditor) e.getSource();
String newName = (String) cellEditor.getCellEditorValue();
node.setUserObject(newName); DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.nodeStructureChanged(node);
} public void editingCanceled(ChangeEvent e) {
editingStopped(e);
}
} @Override
public void treeNodesInserted(TreeModelEvent e) {
} @Override
public void treeNodesRemoved(TreeModelEvent e) {
} @Override
public void treeStructureChanged(TreeModelEvent e) {
}
}
JTree 添加 , 删除, 修改的更多相关文章
- SQL语句添加删除修改字段及一些表与字段的基本操作
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200)2.删除字段 ALTER TABLE table_NA ...
- Entity framework 绑定到Datagridview的添加删除修改
Entity framework 绑定到Datagridview的添加删除修改 using System; using System.Collections.Generic; using System ...
- JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作
html代码: <!--添加/删除/修改 --> <div id="a1"> <button id="a2" onclick=&q ...
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...
- SQL语句添加删除修改字段[sql server 2000/2005]
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
- SQL语句添加删除修改字段
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
- Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath
转: Dom4j 操作, 节点查找 添加 删除 修改 ...xPath 2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多 个人分类: JavaWeb 版权声明:本文为博 ...
- dir(dict)|字典的创建-添加-删除-修改-判断存在-取值等相关操作
dir(dict) ####字典操作:创建-添加-删除-修改-判断存在-取值 #(一)创建字典: {} .等号. zip(). [(),()] #1.创建空字典 dict0 = {} #2.等号创建 ...
- sqlserverdatasouce控件如何让添加删除修改自动化
对于sqlserverdatasouce控件,添加插入修改和删除命令,可以自动删除修改更新数据,不需要编写一行代码,但是有时更新失败,原因在于选中了[开放式并发],这个选中,如果该表与其他的数据表关联 ...
随机推荐
- 解题:国家集训队 Middle
题面 求中位数的套路:二分,大于等于的设为1,小于的设为-1 于是可以从小到大排序后依次加入可持久化线段树,这样每次只会变化一个位置 那左右端点是区间怎么办? 先把中间的算上,然后维护每个区间左右两侧 ...
- (转)Maven学习总结(二)——Maven项目构建过程练习
孤傲苍狼 只为成功找方法,不为失败找借口! Maven学习总结(二)——Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项 ...
- git other-误删恢复等
修改未push的最后一次commit 如在commit后发现漏添加的文件或者commit message需要修改,则可以依次执行: git add FILE_UN_STAGED # 将未提交的文件添加 ...
- cookie的安全性问题
HTTP协议: (1)请求组成部分: 请求行:(get或者post请求:请求路径(不包括主机) :http1.1) 请求头:请求头是浏览器交给服务器的一些信息(比较cookie啥的) 请求体:只有po ...
- PDF截取矢量图
PDF截取矢量图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 方法与步骤 下载并安装 Adobe Acrobat X Pro 软件 点击右侧按钮(工具)-页面-裁剪-单击并选择区域-双击实 ...
- 解决tomcat下面部署多个项目log4j的日志输出会集中输出到一个项目中的问题
在一次项目上线后,发现了一个奇怪的问题,经过对源码的阅读调试终于解决,具体经过是这样的: 问题描述:tomcat7下面部署多个项目,log4j的日志输出会集中输出到一个项目中,就算配置了日志文件的绝对 ...
- Docker学习笔记五 仓库
本文地址:https://www.cnblogs.com/veinyin/p/10452224.html 以下均为命令行下操作 登录登出 docker login // 登录 docker logo ...
- 第7月第27天 c++11 boost
1. #include <boost/asio.hpp> #include <cstdlib> #include <memory> namespace asio = ...
- Linux笔记之如何分割文件或管道流:split
一.简介 在Linux中合并文件可以使用cat命令,后面跟上要合并的文件然后重定向到一个新的文件中即可,甚至可以追加合并.但如果要将一个大文件分割为多个小文件应该如何操作呢? 在Linux的coreu ...
- CSS background汇总
本文更新版本 ,请跳转 所有背景属性都不能继承. 1. background-color 所有元素都能设置背景颜色. background-color的默认值是transparent:也就是说, ...