afurtenbacher
Grünschnabel
Hallo zusammen!
Ich habe viele Beiträge hier über JTrees gelesen, habe aber immernoch einige Probleme.
Ziel: Eein Explorer-JTree der mir nur directories anzeigt und neben jedem Knoten eine Checkbox hat. Das ganze soll dazu verwendet werden Ordner indizieren zu lassen.
Vielleicht hat aber auch jemand eine Idee wie das besser geht als mit einem JTree?!
Hier meine Probleme:
1) Wenn ich auf den Rootknoten (c klicke, geht nachher nichts mehr. Heißt ich kann keinen anderen Knoten mehr öffnen, schließen oder sonstwas machen.
2) Mein Renderer will auch nicht so ganz. Er zeigt mir zwar jedes Element als Ordner an, aber eigentlich hätte ich lieber daß das System-icon verwendet wird.
3) und zu guter Letzt habe ich noch keinen Plan wie ich das mit den Checkboxen machen soll.
Hier mein Code.
Bitte um Hilfe
lg,
Andreas
Ich habe viele Beiträge hier über JTrees gelesen, habe aber immernoch einige Probleme.
Ziel: Eein Explorer-JTree der mir nur directories anzeigt und neben jedem Knoten eine Checkbox hat. Das ganze soll dazu verwendet werden Ordner indizieren zu lassen.
Vielleicht hat aber auch jemand eine Idee wie das besser geht als mit einem JTree?!
Hier meine Probleme:
1) Wenn ich auf den Rootknoten (c klicke, geht nachher nichts mehr. Heißt ich kann keinen anderen Knoten mehr öffnen, schließen oder sonstwas machen.
2) Mein Renderer will auch nicht so ganz. Er zeigt mir zwar jedes Element als Ordner an, aber eigentlich hätte ich lieber daß das System-icon verwendet wird.
3) und zu guter Letzt habe ich noch keinen Plan wie ich das mit den Checkboxen machen soll.
Hier mein Code.
Code:
import java.awt.Component;
import java.io.File;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
public class TestTreeView extends JFrame{
private static final long serialVersionUID = 1L;
private JTree fileTree;
FileSystemView fsv = FileSystemView.getFileSystemView();
DefaultTreeCellRenderer cellRenderer = new FileRenderer();
public TestTreeView() {
super("Ordner auswählen");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setAlwaysOnTop(true);
this.setLocationByPlatform(true);
this.setSize(480, 320);
SwingUtilities.updateComponentTreeUI(this);
DefaultMutableTreeNode rootnode = new DefaultMutableTreeNode(fsv.getRoots()[0]);
Vector<DefaultMutableTreeNode> subNodes = getSubNodes(rootnode);
for (int i=0; i<subNodes.size(); i++) {
rootnode.add(subNodes.get(i));
}
fileTree = new JTree(rootnode);
fileTree.setCellRenderer(cellRenderer);
fileTree.getSelectionModel().addTreeSelectionListener(
new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
if (e.getNewLeadSelectionPath() != null) {
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) e.getNewLeadSelectionPath().getLastPathComponent();
Vector<DefaultMutableTreeNode> subNodes = getSubNodes(selectedNode);
selectedNode.removeAllChildren();
for (int i=0; i<subNodes.size(); i++) {
selectedNode.add(subNodes.get(i));
}
}
}
});
this.add(fileTree);
this.pack();
this.setVisible(true);
}
public Vector<DefaultMutableTreeNode> getSubNodes(DefaultMutableTreeNode rootnode) {
Vector<DefaultMutableTreeNode> subNodes = new Vector<DefaultMutableTreeNode>();
File rootNodeFile = getFileFromNode(rootnode);
if (rootNodeFile.listFiles() != null) { //muß überprüft werden da ordner auf die nicht zugegriffen werden DARF "null" zurück liefern
File[] subFiles = rootNodeFile.listFiles();
for (int i=0; i<subFiles.length; i++) {
if (subFiles[i].isDirectory()) {
subNodes.add(new DefaultMutableTreeNode(subFiles[i].getName()));
}
}
}
return subNodes;
}
private File getFileFromNode(DefaultMutableTreeNode node) {
Object[] o = node.getUserObjectPath();
String pfad = "";
for (Object ob : o) {
pfad = pfad + ob + "\\";
}
return new File(pfad);
}
class FileRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
setIcon(this.getDefaultClosedIcon());
return this;
}
}
}
Bitte um Hilfe
lg,
Andreas