zoukankan      html  css  js  c++  java
  • JTree的用法实践

    package json;
    
    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);
            }
        }
    }
  • 相关阅读:
    web设计师和前端设计师的互动—前端工程师应该具备的三种思维
    PyQt入门系列(一):Hello World
    PIL在windwos系统下Image.show无法显示图片问题的解决方法
    大赛学习笔记
    ArcGIS Add-in开发(一)--获取选定要素的属性值
    【转】WPF颜色相关操作
    斗地主小代码
    MAVEN配置私服仓库
    Error creating bean with name 'transactionManager' defined in ServletContext resource XXX
    org.hibernate.HibernateException: getFlushMode is not valid without active transaction
  • 原文地址:https://www.cnblogs.com/happyPawpaw/p/2854675.html
Copyright © 2011-2022 走看看