Salve mi sono creato una classe PlayerTree per visualizzare dei giocatori divisi per squadra, e fino a qua nessun problema. Durante l'esecuzione del mio programma però ho la necessità di aggiornare il JTree completamente, e sebbene l'albero in se si aggiorni, nel mio JPanel mi mostra sempre il Jtree creato all'inizio. Come posso fare per aggiornare la schermata?

Allego il codice della classe PLayerTree
codice:
public class PlayerTree extends JPanel {    
    JTree tree = new JTree();
    int id;
    
     private static List<String[]> data = new ArrayList<String[]>();
    
    public PlayerTree(String query){
        JScrollPane Spanel = new JScrollPane();
        reloadData(query);
    /*    ResultSet rs;
        
        //panel.setPreferredSize(new Dimension(200,600));
        
        rs = Database.Query("Select * from team",Database.getConn(),false);
        try {
            while(rs.next()){
                
                
                data.add(new String[]{/*"t"+rs.getInt("id_team")rs.getString("nomeSquadra"),rs.getString("nomeSquadra"),null});
            }
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        rs = Database.Query(query, Database.getConn(), false);
        try{
            while(rs.next()){
                StringBuffer sb = new StringBuffer("[" + rs.getInt("id_player") + "]");
                sb.append(rs.getString("nome") + " " );
                sb.append(rs.getString("cognome") + " ");
                //sb.append(rs.getInt("nMaglia"));
                data.add(new String[]{Integer.toString(rs.getInt("id_player")),sb.toString(),rs.getString("nomeSquadra")});
                //data.add(new String[]{Integer.toString(rs.getInt("id_player")),rs.getString("nome") + " " + rs.getString("cognome") + " " + rs.getInt("nMaglia"),rs.getString("nomeSquadra")});
                
            }
        } catch (SQLException e){
            e.printStackTrace();
    
        }
        
        for(String[] s : data){
            System.out.println(s[0]+s[1]+s[2]);
        }
        
        tree = new JTree();
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Giocatori");
        createTreeNodesForElement(root, getElementTreeFromPlainList());
        tree.setModel(new DefaultTreeModel(root));
        tree.setMinimumSize(new Dimension(180,580));
        //tree.getSelectionModel().addTreeSelectionListener(new TreeListener(tree,"player"));*/
       tree.addMouseListener(new MyMouseAdapter());    
        JPanel p = new JPanel();
       // p.add(tree);
        Spanel.getViewport().add(tree);
        Spanel.setPreferredSize(new Dimension(200,600));
        //return Spanel;
        p.add(Spanel);
        //return p;
       // for(Element e : tree){
            
        //}
       
        this.add(p);
    }
        
        Collection<Element> getElementTreeFromPlainList() {
            // builds a map of elements object returned from store
            Map<String, Element> values = new HashMap<String, Element>();
            for (String[] s : data) {
                values.put(s[0], new Element(s[2], s[1]));
            }


            // creates a result list
            Collection<Element> result = new ArrayList<PlayerTree.Element>();


            // for each element in the result list that has a parent, put it into it
            // otherwise it is added to the result list
            for (Element e : values.values()) {
                if (e.parent != null) {
                    values.get(e.parent).getChildren().add(e);
                } else {
                    result.add(e);
                }
            }


            return result;
        }
        
       
        void createTreeNodesForElement(final DefaultMutableTreeNode dmtn, final Collection<Element> elements) {
            // for each element a tree node is created
            for (Element child : elements) {
                DefaultMutableTreeNode created = new DefaultMutableTreeNode(child.getName());
                dmtn.add(created);
                createTreeNodesForElement(created, child.getChildren());
            }
        }
        
        public void reloadData(String query){
            ResultSet rs;
            //JScrollPane Spanel = new JScrollPane();
            //panel.setPreferredSize(new Dimension(200,600));
            //reloadData(query);
            rs = Database.Query("Select * from team",Database.getConn(),false);
            try {
                while(rs.next()){
                    
                    
                    data.add(new String[]{/*"t"+rs.getInt("id_team")*/rs.getString("nomeSquadra"),rs.getString("nomeSquadra"),null});
                }
            } catch (SQLException e) {
                
                e.printStackTrace();
            }
            rs = Database.Query(query, Database.getConn(), false);
            try{
                while(rs.next()){
                    StringBuffer sb = new StringBuffer("[" + rs.getInt("id_player") + "]");
                    sb.append(rs.getString("nome") + " " );
                    sb.append(rs.getString("cognome") + " ");
                    //sb.append(rs.getInt("nMaglia"));
                    data.add(new String[]{Integer.toString(rs.getInt("id_player")),sb.toString(),rs.getString("nomeSquadra")});
                    //data.add(new String[]{Integer.toString(rs.getInt("id_player")),rs.getString("nome") + " " + rs.getString("cognome") + " " + rs.getInt("nMaglia"),rs.getString("nomeSquadra")});
                    
                }
            } catch (SQLException e){
                e.printStackTrace();
        
            }
            
            for(String[] s : data){
                System.out.println(s[0]+s[1]+s[2]);
            }
            
//            tree = new JTree();
            DefaultMutableTreeNode root = new DefaultMutableTreeNode("Giocatori");
            createTreeNodesForElement(root, getElementTreeFromPlainList());
            tree.setModel(new DefaultTreeModel(root));
            tree.setMinimumSize(new Dimension(180,580));
           
            //tree.getSelectionModel().addTreeSelectionListener(new TreeListener(tree,"player"));
           //tree.addMouseListener(new MyMouseAdapter());    
        }
        
        public JTree getTree(){
            return tree;
        }


        public static class Element {
            private final String parent;
            private final String name;
            private final Collection<Element> children = new ArrayList<PlayerTree.Element>();


            public Element(final String parent, final String name) {
                super();
                this.parent = parent;
                this.name = name;
            }


            public String getName() {
                return name;
            }


            public Collection<Element> getChildren() {
                return children;
            }


        }
        
        class MyMouseAdapter extends MouseAdapter{
            public void mouseClicked(MouseEvent e){
                if (e.getClickCount()==2){
                    System.out.println(tree.getSelectionPath());
                    System.out.println(tree.getRowForPath(tree.getSelectionPath()));
                    System.out.println(tree.getSelectionPath())    ;
                    StringTokenizer st = new StringTokenizer(tree.getSelectionPath().toString(),"[] ,");
                    /*while(st.hasMoreTokens()){
                        System.out.println(st.nextToken());
                    }*/
                    try{
                        st.nextToken();
                        st.nextToken();
                        id = Integer.parseInt(st.nextToken());
                        System.out.println(id);
                    }catch(Exception ex){
                        
                    }
                    
                    
                }
            }
        }
    }
in particolare nel mio pannello ho un tasto "cerca" che mi cambia completamente la query e invoca il metodo reloadData(query). Solo che l'albero visuallizzato è sempre lo stesso. Come posso fare?