我们的还是自定义的Jtree的类:

package jtree.customNode;

import java.io.File;

import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel; import util.ImageManager;
import jtree.checkBoxTree.CheckBoxTreeNodeListender; public class ZTreeCusNode extends JTree { private static final long serialVersionUID = -581164150235777786L;
private static final String ROOT_NAME = "我的电脑";
private static final int levelUp = 3; public ZTreeCusNode() {
this.setModel(new DefaultTreeModel(createRootNode()));
this.setCellRenderer(new CusNodeTreeCellRender());
this.addCheckSelectListender();
} private void addCheckSelectListender() {
this.addMouseListener(new CheckBoxTreeNodeListender(this));
} public CusTreeNode createRootNode(){
CusTreeNode treeNode = null;
CusTreeNode rootNode = new CusTreeNode(ROOT_NAME,ImageManager.getImageIconByShortName("home.png"));
for(int i = 0; i < File.listRoots().length ; i++){
if(File.listRoots()[i].isDirectory()){
String rootPath = File.listRoots()[i].getPath();
treeNode = creatDefaultMutableTreeNode(rootPath,0);
rootNode.add(treeNode);
treeNode = null;
}
} return rootNode;
} private CusTreeNode creatDefaultMutableTreeNode(String nodePath,int level) {
CusTreeNode node = null;
if(level == 0){
node = new CusTreeNode(nodePath,ImageManager.getImageIconByShortName("pan.png"));
}else if(level == 1){
node = new CusTreeNode(nodePath,ImageManager.getImageIconByShortName("ff.png"));
}else{
node = new CusTreeNode(nodePath);
}
CusTreeNode treeNode = null;
level = level+1;
File file = new File(nodePath);
if(file.isDirectory() && file.listFiles() != null){
for(int i = 0; i < file.listFiles().length && level < levelUp; i++){
if(file.listFiles()[i].isDirectory()){
String rootPath = file.listFiles()[i].getPath();
treeNode = creatDefaultMutableTreeNode(rootPath,level);
node.add(treeNode);
treeNode = null;
}
}
} return node;
}
}

但是因为各个节点的图标,可能比一样,我们把图标的信息集合到节点中去,这样的话,可以根据条件给不同的节点设置不同的节点,显示的时候,直接从节点中取出来即可,根据这种分析,我们需要自定义DefaultMutableTreeNode 。

package jtree.customNode;

import javax.swing.Icon;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel; public class CusTreeNode extends DefaultMutableTreeNode { private static final long serialVersionUID = 3311434895405929201L; private boolean isSelected = false; private boolean enabled = false; private boolean isVisible = false; private Icon icon = null; private String iconName = null; private int selectionMode = 0; public CusTreeNode(Object userObject,Icon icon) {
this(userObject, true, false, true, true, icon);
} public CusTreeNode(String nodePath) {
this(nodePath, true, false, true, true, null);
} public CusTreeNode(Object userObject, boolean allowsChildren, boolean isSelected, boolean enabled, boolean isVisible, Icon icon) { super(userObject, allowsChildren); this.isSelected = isSelected; this.enabled = enabled; this.isVisible = isVisible; this.icon = icon; setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); } public boolean isSelected() {
return isSelected;
} public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
} public boolean isEnabled() {
return enabled;
} public void setEnabled(boolean enabled) {
this.enabled = enabled;
} public boolean isVisible() {
return isVisible;
} public void setVisible(boolean isVisible) {
this.isVisible = isVisible;
} public Icon getIcon() {
return icon;
} public void setIcon(Icon icon) {
this.icon = icon;
} public String getIconName() {
return iconName;
} public void setIconName(String iconName) {
this.iconName = iconName;
} public int getSelectionMode() {
return selectionMode;
} public void setSelectionMode(int selectionMode) {
this.selectionMode = selectionMode;
} }

然后是节点的渲染如下:

package jtree.customNode;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension; import javax.swing.Icon;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.plaf.ColorUIResource;
import javax.swing.tree.TreeCellRenderer; import jtree.checkBoxTree.CheckBoxTreeLabel; public class CusNodeTreeCellRender extends JPanel implements TreeCellRenderer { private static final long serialVersionUID = 4676667399191240255L; protected CheckBoxTreeLabel label; // protected JLabel label;
public CusNodeTreeCellRender() {
setLayout(new BorderLayout());
add(label = new CheckBoxTreeLabel());
// add(label = new JLabel());
label.setForeground(UIManager.getColor("Tree.textForeground"));
this.setPreferredSize(new Dimension(100, 20));
} /*
* (non-Javadoc)
*
* @see
* javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent(javax.
* swing.JTree, java.lang.Object, boolean, boolean, boolean, int, boolean)
*/
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
String stringValue = tree.convertValueToText(value, selected, expanded,
leaf, row, hasFocus);
boolean nodeIsEnabled = ((CusTreeNode) value).isEnabled();
setEnabled(nodeIsEnabled); label.setFont(tree.getFont());
label.setText(stringValue);
label.setSelected(selected);
label.setFocus(hasFocus);
if (leaf)
label.setIcon(UIManager.getIcon("Tree.leafIcon"));
else if (expanded)
label.setIcon(UIManager.getIcon("Tree.openIcon"));
else{
label.setIcon(UIManager.getIcon("Tree.closedIcon"));
}
Icon icon = ((CusTreeNode) value).getIcon();
if(icon != null){
label.setIcon(icon);
} return this;
} @Override
public void setBackground(Color color) {
if (color instanceof ColorUIResource)
color = null;
super.setBackground(color);
}
}

测试代码:

public class TestZTreeCusNode {

    /**
* @param args
*/
public static void main(String[] args) {
ZTreeCusNode tree = new ZTreeCusNode();
JScrollPane scroll = new JScrollPane(tree);
//测试的环境
JFrame test = new JFrame();
test.setSize(450, 330);
test.setLocation((test.getToolkit().getScreenSize().width - 450) / 2,
(test.getToolkit().getScreenSize().height - 330) / 2);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.add(scroll);
test.setVisible(true); } }

Jtree (节点的渲染+资源管理器)的更多相关文章

  1. Jtree(节点的渲染+资源管理器)(2)

    上一次我们建立一个比较简单的资源管理器,这次我们说一下上面的资源管理器的问题,并且得尽量的贴近windows的资源管理器. 这样一个简单的资源管理树就完成了,下面我们说说它的问题: ① 图片和外观和W ...

  2. JTree实现电脑资源管理器

    0.前言 最近老师布置了一项用Java写资源管理器的任务,一开始以为简单,但是实际操作起来,却发现网上的资源用起来相对生疏.在使用中,我也遇到了许多问题,虽然不能像其他博主一样,写的非常齐全,但我还是 ...

  3. 使用Windows Form 制作一个简易资源管理器

    自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始 ...

  4. HDFS分布式文件系统资源管理器开发总结

      HDFS,全称Hadoop分布式文件系统,作为Hadoop生态技术圈底层的关键技术之一,被设计成适合运行在通用硬件上的分布式文件系统.它和现有的分布式文件系统有很多共同点,但同时,它和其他的分布式 ...

  5. 初识IO流之小型资源管理器

    初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!! 所以我们学习的时候要抱有探索的精神,求知 ...

  6. yarn资源管理器高可用性的实现

    资源管理器高可用性 . The ResourceManager (RM) is responsible for tracking the resources in a cluster, and sch ...

  7. windows资源管理器多标签打开 windows文件夹多标签浏览 浏览器tab页面一样浏览文件夹 clover win8 win10 报错 无响应问题怎么解决 clover卡死 clover怎么换皮肤

    大家都知道,我们打开一堆文件夹的时候,是什么样子 “厚厚的一叠”图标堆叠在一起的,非常的不方便 那么,是不是可以像浏览器一样的tab页面展示呢? 答案是可以的 安装好就是这样子的 是不是方便漂亮了很多 ...

  8. winform:简单文件资源管理器

    今天全部学习内容的体现就是winform的资源管理器.这个资源管理器主要由一个textbox获取路径,然后在treeview那里通过递归的方式呈现目录树,当用户点击treeview的节点是,会触发Af ...

  9. Visual C# 2010 实现资源管理器

    演练:使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面 Visual Studio 2010     其他版本     此主题尚未评级 - 评价此主题   Vis ...

随机推荐

  1. java 自制类加载器的简单实现

    package com.xiaomo.reflex; import java.io.File; import java.io.FileInputStream; import java.io.IOExc ...

  2. 第一个ServiceStack程序

    1. https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice 2. http://tech.pro ...

  3. CSS常用操作-图片

    index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  4. chrome devtools 实用快捷键

    Ctrl + O:查找资源,非常使用 Ctrl + Shift + C:切换审查元素模式与浏览器窗口模式 Ctrl + Shift + F:在源代码中搜索 Ctrl + G:跳转到指定行

  5. lesson4:利用jmeter来压测数据库

    本文讲述了如何利用jmeter来压测数据库,事例中选取了mysql作为测试数据库,其它的数据库也是一样,只需要更换驱动程序即可. 准备工作:a.mysql数据库安装,请自行百度:b.jdbc驱动包,请 ...

  6. monkeyrunner总结

    device=MonkeyRunner.waitForConnection()   //手机连接 result = device.takeSnapshot()    //截图 result.write ...

  7. java中不常见的keyword:strictfp,transient

    1.strictfp, 即 strict float point (精确浮点). strictfp keyword可应用于类.接口或方法.使用 strictfp keyword声明一个方法时,该方法中 ...

  8. Dynamics CRM记录页面上隐藏子网格“+”标识

    前段时间微软发布了Dynamics 365,这是Dynamics产品的又一次大的变动,期待新的版本能够更好的满足客户的需求,同时提供更多的可定制化的内容. 近期做Dynamics CRM项目遇到很多审 ...

  9. Intent 数据传递 总结

    系统API 可以传递的数据类型 1.传递8大基本类型+String+CharSequence及其数组类型 2.传递ArrayList集合     public Intent putIntegerArr ...

  10. Java初转型-Maven入门

    原系列名:Maven学习总结(一) 原博文出自于:http://www.cnblogs.com/xdp-gacl/p/3498271.html 感谢! 一.Maven的基本概念 Maven(翻译为&q ...