我知道 Java Swing 中的 GUI 代码必须放在
SwingUtilities.invokeAndWait
或SwingUtilities.invokeLater
. 这种方式线程工作正常。
可悲的是,在我的情况下,GUI 更新它的时间比后台线程要长得多。更具体地说:我更新了一个只有大约 400 个条目的 JTree,嵌套深度最大为 4,所以应该没什么可怕的,对吧?但有时需要一秒钟!我需要确保用户能够毫无延迟地输入 JTextPane。好吧,猜猜看,缓慢的 JTree 更新确实会导致 JTextPane 在输入期间出现延迟。它仅在树更新后刷新。
我正在使用 Netbeans,并且凭经验知道 Java 应用程序可以更新大量信息而不会冻结 UI 的其余部分。
如何做呢?
注 1:所有这些DefaultMutableTreeNode
s 都是在invokeAndWait
.
注意 2:当我invokeAndWait
用invokeLater
树替换时不会更新。
注意 3:发现递归树扩展花费的时间最多。
注 4:我正在使用自定义树单元格渲染器,将尝试不使用并报告。
注意 4a:我的树单元渲染器使用映射来缓存和重用创建JTextComponent
的 s,具体取决于树节点(作为键)。
线索1:哇!如果不设置自定义单元格渲染器,它会快 10 倍。我想,我需要一些关于编写自定义树单元渲染器的好教程。可悲的是,我需要一个自定义单元格渲染器。