想做实时更新的树形结构,但是遇到下次更新时候,上次展开节点不能不能保留的问题。这样刷新后的树就又复原了。
请教各位是否有什么办法解决这个问题!!万分感谢!

解决方案 »

  1.   

    to cuij7718:
    添加或者删除了节点后,重新画了一颗树,树的状态就是关闭的,也就是说树没有展开刚才展开的节点。to dulang200x:
    没有重建对象。有人说把原先打开的treepath保存起来,下次刷新的时候展开。谁用过这种办法吗?怎么用啊?
      

  2.   

    我们都在jtree上遇到问题了,帮你顶一下吧
      

  3.   

    谢谢帮忙顶的TX,只是感觉现在对JTree研究的比较透彻的人怎么越来越少了。好多天了,都还没有解决~~~
      

  4.   

    更新模型中的数据后,只要用tree.updateUI()就可以刷新树,还会保留刷新前的展开状态。
      

  5.   

    添加不需要重画树就可以自动更新,删除需要重画树,不过重画还是算了吧,耗资源而且不能保持状态。如果确实需要刷新的就使用updateUI吧
      

  6.   

    用treeModel.nodeStructureChanged(node)也不会重绘整棵树。
      

  7.   


    package com.test;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;public class test implements ActionListener,TreeModelListener
    {
        JLabel label = null;
        JTree tree = null;
        DefaultTreeModel treeModel = null;
        String nodeName = null; //原有节点名称     public test()
        {
            JFrame f = new JFrame("TreeDemo");
            Container contentPane = f.getContentPane();        DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器");        tree = new JTree(root);
            tree.setEditable(true);
            tree.addMouseListener(new MouseHandle());
            treeModel = (DefaultTreeModel)tree.getModel();
            treeModel.addTreeModelListener(this);        JScrollPane scrollPane = new JScrollPane();
            scrollPane.setViewportView(tree);        JPanel panel = new JPanel();
            JButton 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.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });    }    public void actionPerformed(ActionEvent ae)
        {
            if (ae.getActionCommand().equals("新增节点"))
            {
                DefaultMutableTreeNode parentNode = null;            DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点");
                newNode.setAllowsChildren(true);
                TreePath parentPath = tree.getSelectionPath();            parentNode = (DefaultMutableTreeNode)
                                 (parentPath.getLastPathComponent());            treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount());
                tree.scrollPathToVisible(new TreePath(newNode.getPath()));            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 inserted");
        }
        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 test();
        }    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){}
            }
        }
    }
      

  8.   

    好好看看这个例子。实在不明白查查API