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

我们的还是自定义的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 (节点的渲染+资源管理器)的更多相关文章
- Jtree(节点的渲染+资源管理器)(2)
上一次我们建立一个比较简单的资源管理器,这次我们说一下上面的资源管理器的问题,并且得尽量的贴近windows的资源管理器. 这样一个简单的资源管理树就完成了,下面我们说说它的问题: ① 图片和外观和W ...
- JTree实现电脑资源管理器
0.前言 最近老师布置了一项用Java写资源管理器的任务,一开始以为简单,但是实际操作起来,却发现网上的资源用起来相对生疏.在使用中,我也遇到了许多问题,虽然不能像其他博主一样,写的非常齐全,但我还是 ...
- 使用Windows Form 制作一个简易资源管理器
自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始 ...
- HDFS分布式文件系统资源管理器开发总结
HDFS,全称Hadoop分布式文件系统,作为Hadoop生态技术圈底层的关键技术之一,被设计成适合运行在通用硬件上的分布式文件系统.它和现有的分布式文件系统有很多共同点,但同时,它和其他的分布式 ...
- 初识IO流之小型资源管理器
初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!! 所以我们学习的时候要抱有探索的精神,求知 ...
- yarn资源管理器高可用性的实现
资源管理器高可用性 . The ResourceManager (RM) is responsible for tracking the resources in a cluster, and sch ...
- windows资源管理器多标签打开 windows文件夹多标签浏览 浏览器tab页面一样浏览文件夹 clover win8 win10 报错 无响应问题怎么解决 clover卡死 clover怎么换皮肤
大家都知道,我们打开一堆文件夹的时候,是什么样子 “厚厚的一叠”图标堆叠在一起的,非常的不方便 那么,是不是可以像浏览器一样的tab页面展示呢? 答案是可以的 安装好就是这样子的 是不是方便漂亮了很多 ...
- winform:简单文件资源管理器
今天全部学习内容的体现就是winform的资源管理器.这个资源管理器主要由一个textbox获取路径,然后在treeview那里通过递归的方式呈现目录树,当用户点击treeview的节点是,会触发Af ...
- Visual C# 2010 实现资源管理器
演练:使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面 Visual Studio 2010 其他版本 此主题尚未评级 - 评价此主题 Vis ...
随机推荐
- [置顶] 白话最小边覆盖总结--附加 hdu1151结题报告
刚开始看到这个题目的时候就觉得想法很明了,就是不知道如何去匹配... 去网上看了不少人的解题报告,但是对于刚接触“最小边覆盖”的我来说....还是很困难滴....于是自己又开始一如以往学习“最大独立集 ...
- [转]Android Volley完全解析(四),带你从源码的角度理解Volley
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是 ...
- mysql存储过程、函数和触发器的创建 [转]
http://blog.itpub.net/559237/viewspace-438942/ 今天花了半天时间来研究mysql的存储过程函数和触发器的创建,觉得和oracle的大同小异,只是语法上更艰 ...
- FZU 1686 神龙的难题(DLX反复覆盖)
FZU 1686 神龙的难题 pid=1686" target="_blank" style="">题目链接 题意:中文题 思路:每个1看成列, ...
- [iOS]使用symbolicatecrash分析crash文件
对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug.一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还 ...
- springmvc中项目启动直接调用方法
1. <servlet> <servlet-name> AutoServlet </servlet-name> <servlet-class> com. ...
- java开发webservice的几种方式
webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...
- Java基础知识强化48:Java中哈希码
1.概念: 哈希其实只是一个概念,没有什么真实的指向.它的目的是保证数据均匀的分布到一定的范围内.所以不同数据产生相同的哈希码是完全可以的. 现在是站在JAVA虚拟机的角度来看内存 ...
- Linux ssh安全设置
本文摘要 SSH服务器配置文件是/etc/ssh/sshd_conf.在你对它进行每一次改动后都需要重新启动SSH服务,以便让改动生效. SSH服务器配置文件是/etc/ssh/sshd_ ...
- Layout( 布局)
一. 加载方式//class 加载方式<div id="box" class="easyui-layout"style="width:600px ...