JTree 添加 , 删除, 修改

时间:2022-05-11 08:24:23
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语句添加删除修改字段&lbrack;sql server 2000&sol;2005&rsqb;

    用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)&vert;字典的创建-添加-删除-修改-判断存在-取值等相关操作

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

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

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

随机推荐

  1. understanding checkpoint&lowbar;completion&lowbar;target

    Starting new blog series – explanation of various configuration parameters. I will of course follow ...

  2. JSF 2 link&comma; commandLink and outputLink example

    In JSF, <h:link />, <h:commandLink /> and <h:outputLink /> tags are used to render ...

  3. &lbrack;C&plus;&plus;程序设计&rsqb;指向数组元素的指针

    如果先使p指向数组a的首元素(即p=a),则: (1) p++(或p+=1).使p指向下一元素,即a[1]. 如果用*p,得到下一个元素a[1]的值. (2) *p++.由于++和*同优先级,结合方向 ...

  4. HTML5 JavaScript 文件上传

    function fileUpload(targetUrl) { // 隐藏表单名称 var inputName = '_fileselect'; // 文件尺寸 this.fileSize = 0; ...

  5. 数据格式处理(数字,日期),java处理,jsp的fmt处理

    java 格式处理  public static String formatTosepara(float data) {DecimalFormat df = new DecimalFormat(&qu ...

  6. 记一次高并发场景下&period;net监控程序数据上报的性能调优

    最近在和小伙伴们做充电与通信程序的架构迁移.迁移前的架构是,通信程序负责接收来自充电集控设备的数据实时数据,通过Thrift调用后端的充电服务,充电服务收到响应后放到进程的Queue中,然后在管理线程 ...

  7. LODOP批量打印多页模版进行维护

    批量打印的时候,可以循环多任务,也可以循环多页,很多的时候也可以分页分任务,分组打印.如果是一个任务里的多页相同的模版,一个任务中会有很多打印项,这些打印项在每页中的位置是相同的,如果要调整,调整结果 ...

  8. Itext生成pdf文件

    来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...

  9. Oracle 11g快速收集全库统计信息

    环境:Oracle 11.2.0.4 采用并行的方式,快速收集全库统计信息,多用于跨版本升级之后,对全库的统计信息重新进行快速收集: --开启计时 set timing on --设置并行收集 exe ...

  10. Date类为什么设计为可变的,而不是像String一样?

    首先,不得不承认,这确实是类库设计的一个错误,所以"为什么"进行了这个错误设计并没有意义.但没有事物一诞生就是完美的,我们的Java只是反应的慢了一点,再慢了一点. 更何况,Dat ...