我正在开发一个Swing应用程序,我需要定期刷新树。树中的每个节点表示在独立线程中运行的特定任务。每个节点都包含它执行的任务的复选框+状态指示器(由JPanel表示)。我编写了一个自定义的TreeCellRenderer来更改组件外观。我在渲染器中实现了javax.swing.tree.TreeCellRenderer接口,并重写了它的下面方法。
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
我希望每1秒调用一次这个方法,以便刷新每个节点执行的基础任务的状态。
有人可以告诉我如何每1秒调用一次getTreeCellRendererComponent()吗?哪个事件应该从一个单独的线程中触发?我目前通过调用包含JTree的JPanel上的updateUI()方法来实现这一点,但是这会阻止我的整个UI,直到调用从getTreeCellRendererComponent()返回。
[UPDATE]: 我正在使用DefaultTreeSelectionModel,我不想在添加或删除新节点时更新JTree,而是在与每个节点关联的任务完成时更新JTree。当我单击UI中添加的“运行”按钮时,将执行任务。按下“运行”按钮后,我想在添加到节点的JPanel中更新具有不同颜色的每个节点。