JTree为每个节点设置自定义的icon(四)

本文档介绍如何在Java Swing的JTree组件中自定义节点的显示样式,特别是设置不同类型的节点使用不同的图标。通过创建一个继承自DefaultTreeCellRenderer的类,重写getTreeCellRendererComponent方法,根据节点类型决定加载不同的图标。示例代码展示了如何根据节点的子节点数量来决定使用'element.png'或'attr.png'作为节点图标。
摘要由CSDN通过智能技术生成

这篇文章是在文章三的基础上进行编写的,可以先看下文章三,然后再看此篇文章。

除了使用默认的DefaultTreeCellRenderer 类进行创建并设置选中节点高亮的样式,还可以自己进行创建一个类继承实现DefaultTreeCellRenderer类,在类里可以实现icon的自定义以及对应的需求。

代码如下:

首先要根据截图进行注解,并添加上下面代码:(其中jTree是前面几篇文章中创建得到的JTree对象)

jTree.setCellRenderer(new SetIconForJtree());

 

public class SetJtreeIcon extends DefaultTreeCellRenderer {

    private static final long serialVersionUID = 1L;
    ImageIcon userIcon = null;
    String str = null;
    JLabel label = new JLabel();

    DefaultTreeCellRenderer renderer;

    private String key;

    public SetJtreeIcon() {

    }

    public boolean isInt(String str) {
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {

        super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;

        System.out.println(tree);
//        System.out.println(value);
//        System.out.println(selected);
//        System.out.println(expanded);
//        System.out.println(leaf);
//        System.out.println(row);
//        System.out.println(hasFocus);


        if (node == null)
            return null;
        String[] nodeArr = node.toString().split(":");
        if (selected) {
            label.setOpaque(false);//设置该组件边缘像素不可编辑
            label.setForeground(Color.blue);
            label.setBackground(getBackgroundSelectionColor());
        } else {
            label.setOpaque(true);
            label.setBackground(getBackgroundNonSelectionColor());
            label.setForeground(getTextNonSelectionColor());
        }


        if (node.getChildCount() != 0) {
            userIcon = new ImageIcon("你自己的图片路径位置xxxxxx/element.png");
            str = node.toString();
            label.setIcon(userIcon);
            label.setText(str);
            return label;
        }
        userIcon = new ImageIcon("你自己的图片路径位置xxxxxx/attr.png");
        str = node.toString();
        label.setIcon(userIcon);
        label.setText(str);

        return label;
}

得到的效果图如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值