ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
2827
2827
EMPFEHLEN
-
Hallo,
eigentlich dürfte es nicht so schwer sein, aber ich dachte, dass es das Beispiel doch mal poste.
So könnte man einen JTree umsetzen, der aussieht wie im WindowsExplorer.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
package explorer; import java.awt.Component; import java.io.File; import java.util.Enumeration; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; import javax.swing.filechooser.FileSystemView; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; public class FileSystemTree extends JTree { private FileSystemView fileSystemView = FileSystemView.getFileSystemView(); public FileSystemTree() { super(); File[] roots = fileSystemView.getRoots(); File file = roots[0]; DefaultMutableTreeNode node = new DefaultMutableTreeNode(file); node = prepareTreeNode(node); setModel(new DefaultTreeModel(node)); setRootVisible(true); setCellRenderer(new DefaultTreeCellRenderer() { public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; File f = (File)node.getUserObject(); label.setText(fileSystemView.getSystemDisplayName(f)); label.setIcon(fileSystemView.getSystemIcon(f)); return label; } }); addTreeExpansionListener(new TreeExpansionListener() { public void treeCollapsed(TreeExpansionEvent event) { TreePath path = event.getPath(); TreeNode collapsedNode = (TreeNode) path.getLastPathComponent(); TreePath selectedPath = getSelectionPath(); TreeNode selectedNode = null; if (selectedPath != null) { selectedNode = (TreeNode) selectedPath.getLastPathComponent(); if (isSelectedNodeInCollapsedNode(selectedNode.getParent(), collapsedNode)) { setSelectionPath(path); } } } private boolean isSelectedNodeInCollapsedNode(TreeNode selectedNodeParent, TreeNode collapsedNode){ if(selectedNodeParent == null){ return false; } else if(collapsedNode.equals(selectedNodeParent)){ return true; } else{ return isSelectedNodeInCollapsedNode(selectedNodeParent.getParent(), collapsedNode); } } public void treeExpanded(TreeExpansionEvent event) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent(); prepareChildTreeNodes(node); } }); prepareChildTreeNodes(node); expandRow(0); } public DefaultMutableTreeNode prepareTreeNode(DefaultMutableTreeNode node) { File f = (File) node.getUserObject(); File[] files = f.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; if (file.isDirectory()) node.add(new DefaultMutableTreeNode(file)); } return node; } private void prepareChildTreeNodes(DefaultMutableTreeNode node) { Enumeration<DefaultMutableTreeNode> e = node.children(); while (e.hasMoreElements()) { DefaultMutableTreeNode child = e.nextElement(); prepareTreeNode(child); } } }
MFG
zEriXEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Hallo
Ich weiss, der Eintrag ist schon ziemlich alt, aber vielleicht kann mir ja trotzdem noch jemand helfen...
Das wäre eigentlich genau was ich brauche.. nur werden hier dummerweise die Files nicht angezeigt?
Kann mir jemand sagen, was ich ändern muss, damit die einzelnen Files auch angezeigt werden?
Besten Dank im Voraus!
Gruss the_royal
-
14.05.10 12:17 #3
- Registriert seit
- Jun 2006
- Ort
- (Bayern)
- Beiträge
- 255
Code java:1 2 3 4 5 6 7 8 9 10 11 12
public DefaultMutableTreeNode prepareTreeNode(DefaultMutableTreeNode node) { File f = (File) node.getUserObject(); File[] files = f.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; if (file.isDirectory()) node.add(new DefaultMutableTreeNode(file)); } return node; }
Bin jetzt nicht so in dem Code drin, aber beim Überfliegen hätt ich mal gesagt versuch doch in o.g. Funktion die if-Abfrage rauszulassen. Dabei wir ein Knoten nur geadded, falls er ein Verzeichnis ist. Aber willst du in Deinem Baum wirklich auch die Dateien? Egal...Deine Sache
There´re 10 kinds of people: The one who understand binary, and the others!
{2b|^(2b)} - Shakespear
"Offensichtlich spielst du kein Golf" (der Dude)
Total egal wie bescheuert meine Frage auch ist: Ich bin NICHT Sven Uwe!
-
haha hätte mir den Code auch etwas genauer ansehen sollen, dann hätte ich das eigentlich auch sehen müssen. =)
Ja, brauch das wirklich so. Wir versuchen gerade ein Musiksortier-Programm zu basteln und dann bringt es mir nich viel wenn ich die Ordner, nicht aber die Dateien sehe... :P
Vielen Dank für die rasche Hilfe!
gruss the_royal






Zitieren
Login





