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
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?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){ } } } } }

Rispondi quotando
