先上效果
前言
这里我们是对一个默认的目录树进行改造,让他按照我们的想法进行改变,比如说在原生的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());
方法就可以得到对应的图标类型