@@ -35,6 +35,7 @@ import javax.swing.JPanel
35
35
import javax.swing.event.TreeSelectionEvent
36
36
import javax.swing.event.TreeSelectionListener
37
37
import javax.swing.tree.DefaultMutableTreeNode
38
+ import javax.swing.tree.DefaultTreeModel
38
39
import javax.swing.tree.TreePath
39
40
import javax.swing.tree.TreeSelectionModel
40
41
@@ -45,6 +46,7 @@ class TreeView(
45
46
46
47
// dummyRootNode is a workaround to allow us to hide the root node of the tree
47
48
private val dummyRootNode = createNode(DummyNode ())
49
+ private val model = DefaultTreeModel (dummyRootNode)
48
50
private val rootNodes: RootNodes = RootNodes ()
49
51
50
52
private val splitPane: JBSplitter = JBSplitter ()
@@ -56,9 +58,9 @@ class TreeView(
56
58
init {
57
59
createNodes(dummyRootNode)
58
60
59
- tree = Tree (dummyRootNode )
60
- tree.setRootVisible( false )
61
- tree.setCellRenderer( TreeCellRenderer () )
61
+ tree = Tree (model )
62
+ tree.isRootVisible = false
63
+ tree.cellRenderer = TreeCellRenderer ()
62
64
63
65
tree.selectionModel.selectionMode = TreeSelectionModel .SINGLE_TREE_SELECTION
64
66
tree.addTreeSelectionListener(this ) // we want to listen for when the user selects a node
@@ -264,7 +266,13 @@ class TreeView(
264
266
// TODO(MarshalX): is possible to optimize this to only update the nodes that have changed
265
267
dummyRootNode.removeAllChildren()
266
268
createNodes(dummyRootNode)
267
- tree.updateUI()
269
+
270
+ /*
271
+ Never use tree.updateUI() here.
272
+ It crashes component in 2024.1.4, maybe in other versions too.
273
+ It did not crash in 2023.3.7 and earlier.
274
+ */
275
+ model.reload()
268
276
}
269
277
270
278
private fun createNodes (top : DefaultMutableTreeNode ) {
0 commit comments