树型结构刷新后怎么还是变成原来的结构
当加节点或删节点后
虽然显示时更新后的结构,但节点一展开又变成原来的结构了
我是整体更新的,从新装入数据并生成树
请高手指教

解决方案 »

  1.   

    import java.awt.*;
    import java.util.*;
    import javax.swing.JFrame;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.DefaultMutableTreeNode;import java.awt.event.*;
    import java.io.File;
    public class gui extends JFrame

    JPanel containButtonsJpanel;
    JButton shareResource;
    JButton download;
    JButton play;
    JButton decoder;
    JButton exit;
    JButton update;

    JPanel containJScrollPaneJPanel;
    JScrollPane containTreeJScrollPane;
    JTree tree;
    DefaultMutableTreeNode resourceTreeNode;
    JPanel setSpaceJPanel;
    DefaultMutableTreeNode[] fileName;
    DefaultMutableTreeNode[] fileNameLeft;

    public static void main(String[] args)
    {
    gui sh=new gui();
    }
    public gui()
    {
    creatUserInterface();
    }
    private void creatUserInterface()
    {
    //--------------------------------set buttons----------------------------------
    containButtonsJpanel =new JPanel();
    containButtonsJpanel.setLayout(new GridLayout(12,1,0,10));

    shareResource=new JButton("share resource");
    containButtonsJpanel.add(shareResource);
    shareResource.addActionListener(
    new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    shareResourceActionPerformed(event);
    }
    }
    );
    update=new JButton("update");
    containButtonsJpanel.add(update);
    update.addActionListener(
    new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    updateActionPerformed(event);
    }
    }
    );

    download=new JButton("download");
    containButtonsJpanel.add(download);
    download.addActionListener(
    new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    downloadActionPerformed(event);
    }
    }
    );

    play=new JButton("play");
    containButtonsJpanel.add(play);
    play.addActionListener(
    new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    playActionPerformed(event);
    }
    }
    );

    decoder=new JButton("decoder");
    containButtonsJpanel.add(decoder);
    decoder.addActionListener(
    new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    decoderActionPerformed(event);
    }
    }
    );

    exit=new JButton("exit");
    containButtonsJpanel.add(exit);
    exit.addActionListener(
    new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    exitActionPerformed(event);
    }
    }
    );

    //---------------------------setButtons----------------------------------------

    //---------------------------setTree--------------------------------------------
    containJScrollPaneJPanel=new JPanel();
    //containTreeJScrollPane=new JScrollPane();
    //Dimension dis3=new Dimension();
      //dis3.setSize(280,600);
       //containJScrollPaneJPanel.setPreferredSize(dis3);
    int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
    int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
    resourceTreeNode=new DefaultMutableTreeNode("Resource");
    treeNodesIni();
    tree=new JTree(resourceTreeNode);
    //Dimension dis1=new Dimension();
     // dis1.setSize(300,500);
    //tree.setPreferredSize(dis1);

    containTreeJScrollPane=new JScrollPane(tree,v,h);
    Dimension dis3=new Dimension();
    dis3.setSize(300,400);
    //containTreeJScrollPane=new JScrollPane(tree);
    containTreeJScrollPane.setPreferredSize(dis3);
    containJScrollPaneJPanel.add(containTreeJScrollPane);


    //----------------------------setTree-------------------------------------------------

    //----------------------------setMainInterface--------------------------------------------
    setSpaceJPanel =new JPanel();
    Dimension dis2=new Dimension();
     dis2.setSize(200,200);
     setSpaceJPanel.setPreferredSize(dis2);
    Container contentPane=getContentPane();

    contentPane.setLayout(new BorderLayout());
    contentPane.add(containButtonsJpanel,BorderLayout.EAST);
    contentPane.add(containJScrollPaneJPanel,BorderLayout.WEST);
    //contentPane.add(setSpaceJPanel,BorderLayout.SOUTH);
    setTitle("Share resource system");
    setSize(500,600);
    setVisible(true);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    //----------------------------setMainInterface-------------------------------------
    }
    private void shareResourceActionPerformed(ActionEvent event)
    {

    }
    private void updateActionPerformed(ActionEvent event)
    {

    //tree.updateUI();
    System.out.println(resourceTreeNode.getChildCount());
    //resourceTreeNode.removeAllChildren();
    tree.repaint();
    creatUserInterface();
    tree.repaint();
    //tree.updateUI();
    System.out.println("aaa");
    }
    private void downloadActionPerformed(ActionEvent event)
    {

    }
    private void playActionPerformed(ActionEvent event)
    {

    }
    private void decoderActionPerformed(ActionEvent event)
    {

    }
    private void exitActionPerformed(ActionEvent event)
    {

    }
    private void treeNodesIni()
    {
    String filePath="d:\\test\\groupInf";
    File file=new File(filePath);
    int len=0;
    //DefaultMutableTreeNode top=new DefaultMutableTreeNode("resource");
    if(file.exists()&&file.isDirectory())
    {
    len=file.list().length;
    fileName=new DefaultMutableTreeNode[len];
    for(int i=0;i<len;i++)
    {
    int index=file.list()[i].lastIndexOf(".");
        fileName[i]=new DefaultMutableTreeNode((file.list())[i].substring(0,index));
    //top.add(fileName[i]);
        resourceTreeNode.add(fileName[i]);
    String path=(file.listFiles())[i].getAbsolutePath();
    Vector temp=new Vector();
    parseGroupInf pgi=new parseGroupInf(path);
    pgi.runParseGroupInf();
    temp=pgi.getFileName();
    fileNameLeft=new DefaultMutableTreeNode[temp.size()];
    for(int j=0;j<temp.size();j++)
    {
    fileNameLeft[j]=new DefaultMutableTreeNode(temp.get(j));
    fileName[i].add(fileNameLeft[j]);
    }
    }
    }
    }
    }
      

  2.   

    代码挺长的,还要用到别的类
    我把相关的贴出来
    这是生成叶子节点的private void treeNodesIni()
    {
    String filePath="d:\\test\\groupInf";
    File file=new File(filePath);
    int len=0;
    //DefaultMutableTreeNode top=new DefaultMutableTreeNode("resource");
    if(file.exists()&&file.isDirectory())
    {
    len=file.list().length;
    fileName=new DefaultMutableTreeNode[len];
    for(int i=0;i<len;i++)
    {
    int index=file.list()[i].lastIndexOf(".");
        fileName[i]=new DefaultMutableTreeNode((file.list())[i].substring(0,index));
    //top.add(fileName[i]);
        resourceTreeNode.add(fileName[i]);
    String path=(file.listFiles())[i].getAbsolutePath();
    Vector temp=new Vector();
    parseGroupInf pgi=new parseGroupInf(path);
    pgi.runParseGroupInf();
    temp=pgi.getFileName();
    fileNameLeft=new DefaultMutableTreeNode[temp.size()];
    for(int j=0;j<temp.size();j++)
    {
    fileNameLeft[j]=new DefaultMutableTreeNode(temp.get(j));
    fileName[i].add(fileNameLeft[j]);
    }
    }
    }
    这是生成树的
    containJScrollPaneJPanel=new JPanel();
    //containTreeJScrollPane=new JScrollPane();
    //Dimension dis3=new Dimension();
      //dis3.setSize(280,600);
       //containJScrollPaneJPanel.setPreferredSize(dis3);
    int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
    int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
    resourceTreeNode=new DefaultMutableTreeNode("Resource");
    treeNodesIni();
    tree=new JTree(resourceTreeNode);
    //Dimension dis1=new Dimension();
     // dis1.setSize(300,500);
    //tree.setPreferredSize(dis1);

    containTreeJScrollPane=new JScrollPane(tree,v,h);
    Dimension dis3=new Dimension();
    dis3.setSize(300,400);
    //containTreeJScrollPane=new JScrollPane(tree);
    containTreeJScrollPane.setPreferredSize(dis3);
    containJScrollPaneJPanel.add(containTreeJScrollPane);

    更新时我就是重新调用界面的初始化函数