Beste GoT'ers,
Ik ben bezig met het maken van een FileExplorer object, dat met behulp van een JTree een file explorer weergeeft. Nu wil ik per node een icon afhankelijk van het bestandstype (gewoon bestand of map). Elke node is FileNode (static class binnen FileExplorer class). Het file object behorend bij elk bestand/map in de tree wordt opgeslagen in het userObject van de node.
Bij het renderen van de tree wil ik mbv een getFile().isDirectory() bepalen of er een map icoon gebruikt moet worden of niet. Het renderen gebeurt met FileExplorerCellRenderer:
Nu gaat het fout bij de volgende regel:
Java geeft de volgende error:
Bvd.
Ik ben bezig met het maken van een FileExplorer object, dat met behulp van een JTree een file explorer weergeeft. Nu wil ik per node een icon afhankelijk van het bestandstype (gewoon bestand of map). Elke node is FileNode (static class binnen FileExplorer class). Het file object behorend bij elk bestand/map in de tree wordt opgeslagen in het userObject van de node.
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
| static class FileNode extends DefaultMutableTreeNode { private boolean childrenLoaded = false; private int childrenCount = 0; private FileFilter fileFilter; FileNode(File file, FileFilter fileFilter) { super(file); this.fileFilter = fileFilter; } public File getFile() { return (File)userObject; } public boolean areChildrenLoaded() {} public int getChildCount() {} public Enumeration children() {} public boolean isLeaf() {} private void populateChildren() {} public String toString() { return fsv.getSystemDisplayName(getFile()); } public boolean equals(Object o) {} } |
Bij het renderen van de tree wil ik mbv een getFile().isDirectory() bepalen of er een map icoon gebruikt moet worden of niet. Het renderen gebeurt met FileExplorerCellRenderer:
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
| public class FileExplorerCellRenderer extends JLabel implements TreeCellRenderer { private Icon folderIcon; private Icon fileIcon; private boolean bSelected; public FileExplorerCellRenderer() { folderIcon = new ImageIcon(this.getClass().getClassLoader().getResource("folder.gif")); fileIcon = new ImageIcon(this.getClass().getClassLoader().getResource("file.gif")); } public Component getTreeCellRendererComponent( JTree tree, Object value, boolean bSelected, boolean bExpanded, boolean bLeaf, int iRow, boolean bHasFocus ) { // Find out which node we are rendering and get its file object FileExplorer.FileNode node = (FileExplorer.FileNode)value; this.bSelected = bSelected; // Set the correct foreground color if( !bSelected ) setForeground( Color.black ); else setForeground( Color.white ); if (node.getFile().isDirectory()) { setIcon( folderIcon ); } else { setIcon( fileIcon ); } // Add the text to the cell setText( node.toString() ); return this; } public void paint( Graphics g ) {} } |
Nu gaat het fout bij de volgende regel:
Java:
1
| FileExplorer.FileNode node = (FileExplorer.FileNode)value; |
Java geeft de volgende error:
code:
value is kennelijk om de een of andere reden een DefaultMutableTreeNode. Iemand enig idee waarom, of hoe ik op een andere manier het file object op kan halen uit de node?1
| java.lang.ClassCastException: javax.swing.tree.DefaultMutableTreeNode |
Bvd.
[ Voor 29% gewijzigd door Verwijderd op 03-05-2005 17:51 . Reden: eea ingekort ]