【问题标题】:JTree: TreeCellRenderer not doing as expectedJTree:TreeCellRenderer 未按预期执行
【发布时间】:2015-07-22 16:22:58
【问题描述】:

简而言之,我希望将树渲染为第一级为粗体。

public class TreeRenderer1 extends DefaultTreeCellRenderer {

@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
        boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
    super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;

    if (node.getLevel()==1) {
        setFont(getFont().deriveFont(Font.BOLD));
    }

    return this;
}
}

然而,这会使我的树中的所有节点变为粗体。怎么了?

【问题讨论】:

    标签: java swing fonts jtree treecellrenderer


    【解决方案1】:

    如果级别不是1,则重置渲染的字体状态...

    if (node.getLevel()==1) {
        setFont(getFont().deriveFont(Font.BOLD));
    } else {
        setFont(getFont().deriveFont(Font.PLAIN));
    }
    

    渲染是一种共享资源,您对其所做的任何更改都会被带到下一个要渲染的元素上,因此您必须始终确保在某个时候将其设置为“默认”状态

    【讨论】:

    • 像魅力一样工作!抱歉,这是一个愚蠢的问题。不知道 setfont 需要重置
    • @GreenMellon 如果你不知道,任何人都可以偷偷摸摸;)
    【解决方案2】:

    在您的代码中,您为级别 1 设置了粗体字,但其他级别呢? else 条件在哪里?你可以试试这个吗?

    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value,
            boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
        super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);
    
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
    
        if (node.getLevel()==1) {
            setFont(getFont().deriveFont(Font.BOLD));
        } else {
            setFont(getFont().deriveFont(Font.PLAIN));
        }
    
        return this;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 2017-12-15
      • 2011-02-25
      • 2012-11-23
      • 2014-10-20
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多