Hallo,
ich folgenes Problem:
Ich habe einen JTree mit einem TreeModel. Das TreeModel enthält die Verzeichnisstruktur des Computers. Also z.B. C:\ und alle Verzeichnisse und Dateien da drunter. Jetzt will ich wenn ein JButton gedrückt wird ab einen Knoten, der selektiert wurde, z.B. C:\ Programme, alle Verzeichnisse und Dateien rekursiv ermitteln. Mit getChild(Object parent, int index) bekomme ich nur den Wert null egal was ich selektiert habe.
Kann mir jemand helfen?
Jetzt noch ein Auszug aus meinem Programm:
Danke schonmal im Voraus.
ich folgenes Problem:
Ich habe einen JTree mit einem TreeModel. Das TreeModel enthält die Verzeichnisstruktur des Computers. Also z.B. C:\ und alle Verzeichnisse und Dateien da drunter. Jetzt will ich wenn ein JButton gedrückt wird ab einen Knoten, der selektiert wurde, z.B. C:\ Programme, alle Verzeichnisse und Dateien rekursiv ermitteln. Mit getChild(Object parent, int index) bekomme ich nur den Wert null egal was ich selektiert habe.
Kann mir jemand helfen?
Jetzt noch ein Auszug aus meinem Programm:
Code:
...
JTree rootSelectionTree = new JTree();
String rootNames[];
File[] rootFiles = File.listRoots();
if(rootFiles!=null){
rootNames = new String[rootFiles.length];
}
File root = new File(rootNames[selectedIndex]);
DLP_FileTreeModel model = new DLP_FileTreeModel(root);
rootSelectionTree.setModel(model);
tsm = new DefaultTreeSelectionModel();
tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
rootSelectionTree.setSelectionModel(tsm);
...
Code:
import javax.swing.tree.TreeModel;
import java.io.File;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreePath;
class DLP_FileTreeModel implements TreeModel {
protected File root;
public dnp_FileTreeModel(File root){
this.root = root;
}
/**
* Adds a listener for the <code>TreeModelEvent</code> posted after the
* tree changes.
*
* @param l the listener to add
*/
public void addTreeModelListener(TreeModelListener l) {
}
/**
* Returns the child of <code>parent</code> at index <code>index</code>
* in the parent's child array.
*
* @param parent a node in the tree, obtained from this data source
* @param index int
* @return the child of <code>parent</code> at index <code>index</code>
*/
public Object getChild(Object parent, int index) {
String[] children = ((File)parent).list();
if((children == null) || (index >= children.length)){
return null;
}
return new File((File) parent, children[index]);
}
/**
* Returns the number of children of <code>parent</code>.
*
* @param parent a node in the tree, obtained from this data source
* @return the number of children of the node <code>parent</code>
*/
public int getChildCount(Object parent) {
String[] children = ((File)parent).list();
if(children == null){
return 0;
}
return children.length;
}
/**
* Returns the index of child in parent.
*
* @param parent a note in the tree, obtained from this data source
* @param child the node we are interested in
* @return the index of the child in the parent, or -1 if either
* <code>child</code> or <code>parent</code> are <code>null</code>
*/
public int getIndexOfChild(Object parent, Object child) {
String[] children = ((File)parent).list();
if(children == null){
return -1;
}
String childrenname = ((File)child).getName();
for(int i=0; i < children.length;++i){
if(childrenname.equals(children[i])){
return i;
}
}
return -1;
}
/**
* Returns the root of the tree.
*
* @return the root of the tree
*/
public Object getRoot() {
return root;
}
/**
* Returns <code>true</code> if <code>node</code> is a leaf.
*
* @param node a node in the tree, obtained from this data source
* @return true if <code>node</code> is a leaf
*/
public boolean isLeaf(Object node) {
return ((File)node).isFile();
}
/**
* Removes a listener previously added with
* <code>addTreeModelListener</code>.
*
* @param l the listener to remove
*/
public void removeTreeModelListener(TreeModelListener l) {
}
/**
* Messaged when the user has altered the value for the item identified
* by <code>path</code> to <code>newValue</code>.
*
* @param path path to the node that the user has altered
* @param newValue the new value from the TreeCellEditor
*/
public void valueForPathChanged(TreePath path, Object newValue) {
}
}
Danke schonmal im Voraus.