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?