Java Swing:如何使用JTree和JTextPanes作为节点?

Java Swing:如何使用JTree和JTextPanes作为节点?,java,user-interface,swing,jtree,Java,User Interface,Swing,Jtree,JTree使用DefaultTreeCellRenderer作为单元格渲染器。 此类是JLabel的子类 我想将JTree用于比JLabel更复杂的元素,例如 JTextPane 问题是:我不能子类化DefaultTreeCellRenderer,因为它 仍然是JLabel 编写自己的TreeCellRenderer太复杂了。 为什么?因为:DefaultTreeCellRenderer有17个字段, 并且不仅仅是实现TreeCellRenderer GetTreeCellRenderCompo

JTree
使用
DefaultTreeCellRenderer
作为单元格渲染器。
此类是
JLabel
的子类

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

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

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

你能想出什么简单的解决办法


我需要将树元素设置为
JTextPane
s,以便能够执行复杂的格式设置。

您仍然可以将DefaultTreeCellRenderer子类化,并仅覆盖
GetTreeCellRenderComponent
方法,以返回您想要的格式设置为
JTextPane
的组件。您仍然需要做DefaultTreeCellRenderer在其实现中所做的大量工作,但您不必为这17个左右字段的维护方面操心

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

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
的子类将使方法的实现更加容易。

您需要JTextPane做什么?必须实现接口。不应该太难。事实上,我觉得搞乱gui之类的东西很有趣。不,那是cell editor。为此,有一个很好的抽象类AbstractCellEditory,你也可以说这样做会更“干净”。@jjnguy你能帮我吗