簡體   English   中英

JTree:TreeCellRenderer沒有按預期做

[英]JTree: TreeCellRenderer not doing as expected

簡而言之,我希望將樹渲染為第一級為粗體。

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;
}
}

但是,這會使樹中的所有節點變為粗體。 怎么了?

如果級別不為1則重置渲染的字體狀態。

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

渲染是共享資源,您對它所做的任何更改都會被帶到下一個要渲染的元素上,因此您必須始終確保將其設置為“默認”狀態

在您的代碼中,將級別1的字體設置為粗體,而其他級別呢。 其他條件在哪里? 你可以試試看嗎?

@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;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM