0

当业务逻辑更新模型时,我需要更改树节点的颜色,等待 1 秒,然后将其颜色更改回来。

基本上我想创建类似的东西,比如在运行时更改 JList 行颜色,但是对于 JTree。

所以我可以使用类似的技术,但我也不会改变祖先节点的颜色,所以即使没有展开,用户也可以看到通知。

我该怎么做?

4

3 回答 3

2

首先,当业务模型更新时,请确保在树模型中触发适当的树更新事件,以便 JTree 知道要更新。

然后您需要定义一个设置颜色的 TreeCellRenderer。当业务模型更新时,告诉您的渲染器要突出显示哪些节点。

然而,这里的诀窍是关闭颜色。您可以定义一个线程或更好的执行器来休眠 1000 毫秒,然后告诉渲染器不再突出显示节点,然后再次触发树更新事件,以便 JTree 将适当地重新绘制。

于 2009-11-17T21:13:57.697 回答
1

检查这个在 JTree 中突出显示节点的后代

您可以轻松地对其进行修改以突出显示父级,现在您只需要插入一个定时突出显示的解决方案,就像我在另一个线程上提供的解决方案一样。突出显示,计时器,未设置的突出显示。

如果模型更新频繁并且您希望对突出显示线程的执行进行一些控制,则使用SwingWorker加上可能的Executor

于 2009-11-17T22:56:49.380 回答
0

应该使用 SwingWorker 改进它以在一段时间后退色:

  class RuntimeTreeRender extends DefaultTreeCellRenderer {


    boolean specialColor = false;

    @Override
    public Color getBackgroundNonSelectionColor() {
        if(specialColor) {
            return Color.GREEN;
        } else {
            return null;
        }
    }


    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean arg2, boolean arg3, boolean arg4, int arg5, boolean arg6) {

        Component c = super.getTreeCellRendererComponent(tree, value, arg2, arg3, arg4, arg5, arg6);

            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;

                if(YOUR_CONDITION_ON_NODE) { // for exammple : node.getUserObject().toString().contains("a")
                    specialColor = true;
                } else {
                    specialColor = false;
                }

        return c;
    }

}

于 2014-10-28T11:14:14.550 回答