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 添加 , 删除, 修改的更多相关文章

  1. SQL语句添加删除修改字段及一些表与字段的基本操作

    用SQL语句添加删除修改字段 1.增加字段     alter table docdsp    add dspcode char(200)2.删除字段     ALTER TABLE table_NA ...

  2. Entity framework 绑定到Datagridview的添加删除修改

    Entity framework 绑定到Datagridview的添加删除修改 using System; using System.Collections.Generic; using System ...

  3. JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作

    html代码: <!--添加/删除/修改 --> <div id="a1"> <button id="a2" onclick=&q ...

  4. 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

    用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...

  5. SQL语句添加删除修改字段[sql server 2000/2005]

    用SQL语句添加删除修改字段1.增加字段     alter table docdsp    add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME ...

  6. SQL语句添加删除修改字段

    用SQL语句添加删除修改字段1.增加字段     alter table docdsp    add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME ...

  7. Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath

    转: Dom4j 操作, 节点查找 添加 删除 修改 ...xPath 2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多 个人分类: JavaWeb   版权声明:本文为博 ...

  8. dir(dict)|字典的创建-添加-删除-修改-判断存在-取值等相关操作

    dir(dict) ####字典操作:创建-添加-删除-修改-判断存在-取值 #(一)创建字典: {} .等号. zip(). [(),()] #1.创建空字典 dict0 = {} #2.等号创建 ...

  9. sqlserverdatasouce控件如何让添加删除修改自动化

    对于sqlserverdatasouce控件,添加插入修改和删除命令,可以自动删除修改更新数据,不需要编写一行代码,但是有时更新失败,原因在于选中了[开放式并发],这个选中,如果该表与其他的数据表关联 ...

随机推荐

  1. Hadoop基础-MapReduce的常用文件格式介绍

    Hadoop基础-MapReduce的常用文件格式介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MR文件格式-SequenceFile 1>.生成SequenceF ...

  2. UVALive - 4636 Cubist Artwork(贪心)

    题目链接 题意 给出正视图和侧视图,判断最少用几个立方体 分析 若存在高度相同的立方块,则以数目多的那面为准. #include <iostream> #include <cstdi ...

  3. 何凯文每日一句打卡||DAY5

  4. phpStorm 8.0.3 设置

    phpstorm 8 license key Learn Programming===== LICENSE BEGIN =====63758-1204201000000Ryqh0NCC73lpRm!X ...

  5. 阿里云Linux服务器安装 nginx+mysql+php

    阿里云Linux服务器安装 nginx+mysql+php步骤1.登录服务器2.下载安装包3.将安装包上传到服务器的/home目录下 注:使用rz sz命令进行本地和服务器间的上传.下载,安装命令yu ...

  6. mysql先排序在分组

    – 表的结构 `test`– CREATE TABLE IF NOT EXISTS `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varcha ...

  7. 关于Spring mvc注解中的定时任务的配置

    关于spring mvc注解定时任务配置 简单的记载:避免自己忘记,不是很确定我理解的是否正确.有错误地方望请大家指出. 1,定时方法执行配置: (1)在applicationContext.xml中 ...

  8. MySQL5.6主从复制最佳实践

    MySQL5.6     主从复制的配置  环境 操作系统:CentOS-6.6-x86_64 MySQL 版本:mysql-5.6.26.tar.gz 主节点 IP:192.168.31.57    ...

  9. SANS社区帐号邮件激活问题

    注册时,密码需要数字,大写字母,小写字母,符号10位以上才能注册成功    吐槽:谁来爆破一下这种强度的密码,哈哈. 在我的文章中,有 计算机取证 分类,里面的一篇文章 Virtual Worksta ...

  10. python_ssh连接

    首先下载paramikopip install paramiko查看并启动ssh服务service ssh status 添加用户:useradd -d /home/zet zetpasswd zet ...