[java]代码库
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package yan.t3;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class JTreeTest implements ActionListener, TreeModelListener {
JLabel label = null;
JTree tree = null;
DefaultTreeModel treeModel = null;
String nodeName = null;// 原有节点名称
public JTreeTest() {
JFrame f = new JFrame("");
Container contentPane = f.getContentPane();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("JSON结构");
tree = new JTree(root);
tree.setEditable(true);
tree.addMouseListener(new MouseHandle());
treeModel = (DefaultTreeModel) tree.getModel();
treeModel.addTreeModelListener(this);
// add this listener for edit the tree node
tree.getCellEditor().addCellEditorListener(new Tree_CellEditorAction());
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(tree);
JPanel panel = new JPanel();
JButton b = new JButton("新增节点");
b.addActionListener(this);
panel.add(b);
b = new JButton("删除节点");
b.addActionListener(this);
panel.add(b);
b = new JButton("清除所有节点");
b.addActionListener(this);
panel.add(b);
label = new JLabel("Action");
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(scrollPane, BorderLayout.CENTER);
contentPane.add(label, BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.requestFocus();
f.setSize(400, 300);
f.setLocationRelativeTo(null);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowLostFocus(WindowEvent e) {
System.out.println("ggg");
}
});
}
// 本方法运行新增、删除、清除所有节点的程序代码.
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()));
label.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);
label.setText("删除节点成功");
}
}
}
if (ae.getActionCommand().equals("清除所有节点")) {
// 下面一行,由DefaultTreeModel的getRoot()方法取得根节点.
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) treeModel.getRoot();
// 下面一行删除所有子节点.
rootNode.removeAllChildren();
// 删除完后务必运行DefaultTreeModel的reload()操作,整个Tree的节点才会真正被删除.
treeModel.reload();
label.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) {
}
label.setText(nodeName + "更改数据为:" + (String) node.getUserObject());
}
public void treeNodesInserted(TreeModelEvent e) {
System.out.println("new node insered");
}
public void treeNodesRemoved(TreeModelEvent e) {
System.out.println("node deleted");
}
public void treeStructureChanged(TreeModelEvent e) {
System.out.println("Structrue changed");
}
public static void main(String[] args) {
new JTreeTest();
}
class MouseHandle 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();
nodeName = treenode.toString();
} catch (NullPointerException ne) {
}
}
}
class Tree_CellEditorAction 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);
}
}
}
by: 发表于:2018-01-04 11:22:47 顶(0) | 踩(0) 回复
??
回复评论