3

JTree用作DefaultTreeCellRenderer单元格渲染器。
这个类是 的子类JLabel

我想使用JTree比 更复杂的元素JLabel,例如 JTextPane.

问题是:我不能子类化DefaultTreeCellRenderer,因为它仍然是一个JLabel.

写一个自己TreeCellRenderer的太复杂了。
为什么?因为:DefaultTreeCellRenderer有 17 个字段,并且不仅仅是实现TreeCellRenderer's getTreeCellRendererComponent(...)

你能想出什么简单的解决方案?

我需要树元素是JTextPanes 才能执行复杂的格式化。

4

2 回答 2

1
public class JTextPaneTreeCellRenderer extends JTextPane implements TreeCellRenderer {

方法:

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {

    // do stuff to this instance of JTextPane
    setEditable(selected);
    setText(value.toString()); //Assumes whatever you stuck in the tree has pretty toString

    if (leaf)
        setBackgroundColor(Color.RED);
    return this;
}

您不需要像默认实现那样复杂。使 Renedere 成为的子类JTextPane将使该方法的实现更加容易。

于 2009-07-06T20:51:40.340 回答
0

您仍然可以继承 DefaultTreeCellRenderer 并仅覆盖该getTreeCellRendererComponent方法以返回JTextPane您希望格式化的组件。您仍然需要做很多 DefaultTreeCellRenderer 在其实现中所做的事情,但您不必为这 17 个左右字段的维护方面烦恼。

编辑阅读评论后删除了JTextField编辑器解决方案

于 2009-07-06T20:39:25.357 回答