JavaSwing绘制树形结构与实现 标签的替换

先上效果

在这里插入图片描述

前言

这里我们是对一个默认的目录树进行改造,让他按照我们的想法进行改变,比如说在原生的Swing,图标都是很难看的,所以我们这里就要对图标进行替换,让目录树达到我们想要的效果。

目录树渲染器的构建

这里想要改变目录树的图标,这里就是必须要的。。

渲染器代码

 /**
     * 设置 目录树渲染器
     */
    class MaptempcatalogTreeRenderer extends DefaultTreeCellRenderer {

        int IMAGEICON_WIDTH = (int)(16.0F * GlobalParameters.getSystemImageZoom());
        int IMAGEICON_HEIGHT = (int)(16.0F * GlobalParameters.getSystemImageZoom());
        BufferedImage bufferedImage = new BufferedImage(IMAGEICON_WIDTH, IMAGEICON_HEIGHT, 2);
        Graphics graphics = bufferedImage.getGraphics();
        //这里几个Icon是我自己的电脑里面的图片,你们可以自己进行替换  
        //DesktopCommonResouces.getIcon()这个方法使我们自己封装的一个方法,你们可以使用  ImageIcon updateloadimage=new ImageIcon(this.getClass().getClassLoader().getResource("updateload.png"));

        Icon Foldericon = DesktopCommonResouces.getIcon("/Catalog/Image_Folder.png");
        Icon Directoryicon = DesktopCommonResouces.getIcon("/Catalog/Image_SpatialDirectory.png");
        Icon Mapicon = DesktopCommonResouces.getIcon("/Catalog/Image_Map.png");
        public Component getTreeCellRendererComponent(JTree tree, Object value,
                                                      boolean sel, boolean expanded,  boolean leaf, int row, boolean hasFocus)
        {
            //执行父类默认的节点绘制操作
            super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
            DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
            MapcatalogLoad.CatalogData data = ( 
            //MapcatalogLoad.CatalogData 这个类是自己封装的一个类,里面主要是包含了是否父节点 ,目录名称还有目录数据。大家可以自行创建
MapcatalogLoad.CatalogData)node.getUserObject();
            //里的数据决定节点图标  这里必须要对他进行Jlable渲染
            JLabel label = new JLabel();
            ImageIcon icon = new ImageIcon();
            label.setText(data.getCatalogName());
            label.setToolTipText(data.getCatalogName());
            
          if(data.isParent()){
              Directoryicon.paintIcon(this,graphics,0,0);
          }else{
              Foldericon.paintIcon(this,graphics,0,0);
          }
            //改变图标
            icon.setImage(bufferedImage);
            label.setIcon(icon);
            return label;
        }
    }

渲染器构建完成之后

当你的渲染器构建完成之后,就可以在创建的jtree里面调用:
catalogtree.setCellRenderer(new MaptempcatalogTreeRenderer());
方法就可以得到对应的图标类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值