JTree的用法实践

来源:互联网 发布:淘宝数据分析表 编辑:程序博客网 时间:2024/06/05 02:52
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);        }    }

}

原文链接:http://www.cnblogs.com/happyPawpaw/archive/2013/01/10/2854675.html

0 0
原创粉丝点击