Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich hab eine JTree der mit Verzeichnisse anzeigt. Nun ich einen Button erstellt mit dem ich das selektierte File Object löschen kann. Es wird auch gelöscht jedoch ist es immer noch im Tree zu sehen. Erst nachdem ich mein Programm erneut gestartet habe ist es weg. Was muss ich machen damit ich nachdem ich gelöscht habe sofort das Verzeichnis(oder die Datei) im Tree verschwindet. Sicherlich was mit ModelListener oder?
Wenn du mit einem TreeModel arbeitest, kannst du bei allen registrierten TreeModelListener die Methode treeNodesRemove aufrufen. Einer der Listener wird für das Neuzeichnen sorgen (und zwar so, dass möglichst wenig Ressourcen verbraucht werden).
Also muss ich so an mein Model den Listener ranhängen.
Code:
model.addTreeModelListener(new TreeModelListener () {
public void treeNodesRemoved (TreeModelEvent e) {
[color=red]Was kommt dann hier rein? Ich muss doch nur irgendwie den TreeModel den root nochmal übergeben damit er sich neu erstellen kann[/color]
}
}
);
[\code]
PS: So sieht mein TreeModel ca. aus:
class FileTreeModel implements TreeModel {
protected myFile root; // Wurzel
public FileTreeModel (myFile root) { this.root = root; }
Also: Es gibt das Interface TreeModel. Du implementierst ein solches TreeModel (nenn's mal "MyModel"). Dann wird dir auffallen, dass es da eine Methode "addTreeModelListener" gibt, auch die implementierst Du.
Dann übergibst du das MyModel dem JTree, und wenn du ein Node entfernst, treeNodesRemoved bei allen TreeModelListenern aufrufen, die bei deinem MyModel registriert sind.
Code:
public class MyModel implements TreeModel{
...
public void addTreeModelListener( ... ){
// Argument irgendwo speichern
}
protected void fireTreeNodesRemoved( TreeModelEvent e ){
// treeNodesRemoved bei allen TreeModelListenern aufrufen
for( int i = 0; i < countTreeModelListeners, i++ )
// Aufruf bei TreeModelListener Nummer "i"
}
public void removeNode( ... ){
// Node löschen
fireTreeNodesRemoved( new TreeModelEvent( ... ));
}
}
mfg Beni
P.S. Es gibt da ein paar vorgefertigte, schau mal die API und deren Code an :wink:
Hmm naja ich hatte ja schon ein TreeModel sonst hätt ich ja keinen Bauminhalt einfügen können:
myFile root = new myFile(System.getProperty("file.separator"));
FileTreeModel model = new FileTreeModel(root);
jTree = new javax.swing.JTree(model);