Ik heb een JTree die wordt opgebouwd (in createTree()) uit een ArrayList (topList), ieder item uit deze list krijgt een Node in de tree. Iedere topList bevat ook weer een lijst, (via getOtherList()) die ieder item daarin krijgt ook weer een eigen Node in die van TopList.
Dat komt er ongeveer zo uit te zien:
De inhoud/lengte van deze lijsten kan veranderen, als dit gebeurt is voordat de update() methode is aangeroepen wordt de tree opnieuw opgebouwd.
Dat het werkt zie ik aan de uitvoer in de command line.
Op het scherm veranderd er echter niets.
En als na deze verandering de methode getSelectedUserObject() aanroep door een node te selecteren in de tree krijg ik een NullPointerException omdat er geen LastSelectedPathComponent kan worden gevonden.
Om de tree te vernieuwen roep ik reload() aan op het model, maar dat heeft geen effect, ook allerlei andere suggesties op internet lijken niet te werken.
(de code heirboven is ter illustratie,er zijn een heleboel dingen gestript waardoor er best wel wat haakjes zijn die niet meer kloppen, maar voor dit voorbeeld geeft dat niet)
Dat komt er ongeveer zo uit te zien:
code:
1
2
3
4
5
| TopList 1 OtherList 1 OtherList 2 topList 2 OtherList 1 |
De inhoud/lengte van deze lijsten kan veranderen, als dit gebeurt is voordat de update() methode is aangeroepen wordt de tree opnieuw opgebouwd.
Dat het werkt zie ik aan de uitvoer in de command line.
Op het scherm veranderd er echter niets.
En als na deze verandering de methode getSelectedUserObject() aanroep door een node te selecteren in de tree krijg ik een NullPointerException omdat er geen LastSelectedPathComponent kan worden gevonden.
Om de tree te vernieuwen roep ik reload() aan op het model, maar dat heeft geen effect, ook allerlei andere suggesties op internet lijken niet te werken.
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
| public void createTree() { JTreeController treeController = new JTreeController(this, dataModel); root = new DefaultMutableTreeNode("blaat"); this.treeView = new JTree(root); DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer(); treeRenderer.setLeafIcon(null); treeView.setCellRenderer(treeRenderer); treeView.setEditable(true); treeModel = new DefaultTreeModel(root); treeModel.addTreeModelListener(treeController); treeView.addTreeSelectionListener(treeController); for(int i = 0; i < topList.size(); i++) { DefaultMutableTreeNode topLevelNode = new DefaultMutableTreeNode(topList.get(i).toString()); albumNode.setUserObject(topList().get(i)); root.add(topLevelNode); System.out.println("adding toplist"); //cycle trough the images in this album for(int j = 0; j < ((topList.get(i))).getOtherList().size(); j++) { DefaultMutableTreeNode bottomLevelNode = new DefaultMutableTreeNode(((topList.get(i))).getOtherList().get(j))).getName()); imageNode.setUserObject(((topList().get(i))).getOtherList().get(j)); albumNode.add(bottomLevelNode); System.out.println(" adding " + ((topList.get(i))).getOtherList().get(j))).getName()); } } System.out.println("JTree created"); } //geeft een NullPointer exception, nadat de tree is geupdate?? public Object getSelectedUserObject() { return ((DefaultMutableTreeNode)treeView.getLastSelectedPathComponent()).getUserObject(); } public void update(Observable observable, Object obj) { System.out.println("tree update received"); if(dataModel.getTreeChanged()) { System.out.println("tree has changed"); dataModel.setTreeChanged(false); //bouw de tree opnieuw op this.createTree(); //ververs de tree - WERKT NIET!!! treeModel.reload(root); } } |
(de code heirboven is ter illustratie,er zijn een heleboel dingen gestript waardoor er best wel wat haakjes zijn die niet meer kloppen, maar voor dit voorbeeld geeft dat niet)
Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.