根据节点中存储的数据突出显示 jtree 中的特定节点

MxL*_*evs 1 java swing jtree treecellrenderer

我有一个显示 jTree 的应用程序。树中的每个节点都有一个布尔字段,称为flagged指示它是否需要用户注意。

如果该字段是 true,那么我希望它以红色突出显示,否则不突出显示。

什么是实现这一目标的好方法?我应该延长DefaultTreeCellRenderer吗?实现我自己的自定义TreeCellRenderer?还有什么方法?

Dan*_*yMo 5

由于您想要进行的自定义渲染非常基本,因此我只会扩展DefaultTreeCellRenderer并覆盖其getTreeCellRendererComponent方法。你可以简单地调整对前景色JLabelDefaultTreeCellRenderer用途。这是一个快速示例:

tree.setCellRenderer(new DefaultTreeCellRenderer() {
  @Override
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
                                                boolean leaf, int row, boolean hasFocus) {
    JLabel label = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    YourNode node = (YourNode)value;
    if (node.isFlagged())
      label.setForeground(Color.RED);

    return label;
  }
});
Run Code Online (Sandbox Code Playgroud)

结果: 在此处输入图片说明