JTree使用DefaultTreeCellRenderer作为单元格渲染器。
这个类是JLabel的子类。
我想使用具有比JLabel更复杂的元素的JTree,比如JTextPane。
问题是:我不能子类化DefaultTreeCellRenderer,因为它仍然是一个JLabel。
编写自己的TreeCellRenderer太复杂了。
为什么?因为:DefaultTreeCellRenderer有17个字段,并且不仅仅是实现TreeCellRenderer的getTreeCellRendererComponent(...)。
你能想出什么简单的解决方案?
我需要的树元素是JTextPane的,以便能够执行复杂的格式。
发布于 2009-07-06 20:51:40
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-06 20:39:25
您仍然可以子类化DefaultTreeCellRenderer并仅覆盖getTreeCellRendererComponent方法,以按您希望的方式返回格式化的JTextPane组件。
edit在阅读评论后删除了JTextField编辑器解决方案
https://stackoverflow.com/questions/1089090
复制相似问题