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你能帮我吗