首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing:如何将JTextPanes作为节点使用JTree?

Swing:如何将JTextPanes作为节点使用JTree?
EN

Stack Overflow用户
提问于 2009-07-06 20:34:25
回答 2查看 864关注 0票数 3

JTree使用DefaultTreeCellRenderer作为单元格渲染器。

这个类是JLabel的子类。

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

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

编写自己的TreeCellRenderer太复杂了。

为什么?因为:DefaultTreeCellRenderer有17个字段,并且不仅仅是实现TreeCellRenderergetTreeCellRendererComponent(...)

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

我需要的树元素是JTextPane的,以便能够执行复杂的格式。

EN

回答 2

Stack Overflow用户

发布于 2009-07-06 20:51:40

代码语言:javascript
复制
public class JTextPaneTreeCellRenderer extends JTextPane implements TreeCellRenderer {

方法:

代码语言:javascript
复制
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的子类将使该方法的实现变得更加容易。

票数 1
EN

Stack Overflow用户

发布于 2009-07-06 20:39:25

您仍然可以子类化DefaultTreeCellRenderer并仅覆盖getTreeCellRendererComponent方法,以按您希望的方式返回格式化的JTextPane组件。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1089090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档