- 浏览: 166097 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
qq_21380041:
954414957@qq.com
HTML5数据可视化第二弹:打造最美3D机房 -
qq_21380041:
楼主,求代码
HTML5数据可视化第二弹:打造最美3D机房 -
luoaz:
楼主能不能传个源码的附件上来, 分享学习下呢?
HTML5+WebGL 3D机房开发实例 -
xiaosi1278:
你好能不能把你讲的源代码发一下!!做参考403541110@q ...
TWaver 3D 编辑器的使用(一)----设计3D场景以及数据绑定 -
TWaverGeek:
BigBird2012 写道您好,您能把您使用TWaver导入 ...
TWaver导入导出AutoCAD DXF图纸
这篇文章介绍的内容其实跟TWaver的组件没有任何关系,但是个人觉得还是挺有意思的,所以发出来共享一下。这个文件树(如下图)完全基于swing的JTree组件实现,先看一下最后我们完成的效果:
运行截图:
功能介绍:
- 树状呈现文件系统结构
- 文件的图标应该使用系统图标
- 鼠标滑过时改变当前节点的背景色(如图中"Windows"节点的砖红色背景)
先看一下类结构:
- FileTreeTest 程序入口
- FileTree 文件树,从JTree继承
- FileNode 封装的文件节点,包括文件名,文件图标和实际的File类及其它标识
- FileTreeRenderer 定制的节点渲染器,从DefaultTreeCellRenderer继承
- FileTreeModel 定制的TreeModel,从DefaultTreeModel继承
考虑到系统文件会很多,在程序开始就初始化整个树是不现实的,所以我采取一种延迟加载的策略,只有当要展开某个节点的时候,才去初始化它的子节点,在FileTree的构造里加一个监听:
addTreeWillExpandListener(new TreeWillExpandListener() { @Override public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException { DefaultMutableTreeNode lastTreeNode = (DefaultMutableTreeNode) event.getPath().getLastPathComponent(); FileNode fileNode = (FileNode) lastTreeNode.getUserObject(); if (!fileNode.isInit) { File[] files; if (fileNode.isDummyRoot) { files = fileSystemView.getRoots(); } else { files = fileSystemView.getFiles( ((FileNode) lastTreeNode.getUserObject()).file, false); } for (int i = 0; i < files.length; i++) { //文件名和图标都是通过fileSystemView得到 FileNode childFileNode = new FileNode( fileSystemView.getSystemDisplayName(files[i]), fileSystemView.getSystemIcon(files[i]), files[i], false); DefaultMutableTreeNode childTreeNode = new DefaultMutableTreeNode(childFileNode); lastTreeNode.add(childTreeNode); } //通知模型节点发生变化 DefaultTreeModel treeModel1 = (DefaultTreeModel) getModel(); treeModel1.nodeStructureChanged(lastTreeNode); } //更改标识,避免重复加载 fileNode.isInit = true; } @Override public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException { } });
当然这种方式需要TableModel的配合,我重载了DefaultTreeModel,在构造里初始化根节点,然后重载isLeaf方法,具体代码可以下载附件查看。
接下来思考一下鼠标滑过改变背景色怎么实现。
写这段代码的时候,我想起来了我刚学Renderer的时候的一个错误的认识:误以为每个节点都有一个Renderer并且妄图在Renderer上加监听!在此强调一下:Renderer只是一个渲染器,要显示节点的时候,JTree就调用它渲染并画到屏幕上,但是无论有多少节点,一个JTree只有一个Renderer!
Renderer上加监听行不通,我们就转换一下思路,在JTree上加鼠标move监听,然后repaint鼠标所在的节点。
addMouseMotionListener(new MouseAdapter() { @Override public void mouseMoved(MouseEvent e) { //获得鼠标所在的TreePath TreePath path=getPathForLocation(e.getX(), e.getY()); //计算repaint的区域并repaint JTree if(path!=null){ if(mouseInPath!=null){ Rectangle oldRect=getPathBounds(mouseInPath); mouseInPath=path; repaint(getPathBounds(path).union(oldRect)); }else{ mouseInPath=path; Rectangle bounds=getPathBounds(mouseInPath); repaint(bounds); } }else if(mouseInPath!=null){ Rectangle oldRect=getPathBounds(mouseInPath); mouseInPath=null; repaint(oldRect); } } });
需要在JTree中保存鼠标滑过的TreePath(mouseInPath),这样在Renderer中才可以改变mouseInPath的背景色
FileTree fileTree=(FileTree)tree; JLabel label= (JLabel) super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus); DefaultMutableTreeNode node=(DefaultMutableTreeNode)value; FileNode fileNode=(FileNode)node.getUserObject(); label.setText(fileNode.name); label.setIcon(fileNode.icon); label.setOpaque(false); //如果当前渲染的节点就是鼠标滑过的节点,改变背景色 if(fileTree.mouseInPath!=null&& fileTree.mouseInPath.getLastPathComponent().equals(value)){ label.setOpaque(true); label.setBackground(new Color(255,0,0,90)); } return label;
至此这个文件树就写完了!全部代码在附件,有兴趣的同学可以下载看看,也希望看过的同学有好的想法来交流一下。
附件:见原文最下方
发表评论
-
数字图像处理技术在TWaver可视化中的应用
2015-04-16 14:30 721数字图像处理(Digital Image Processin ... -
TWaver HTML5之树形布局
2015-03-11 10:53 1429转眼间春节假期已经过完,作为一个职业的程序猿,不知道大家有没 ... -
TWaver推智能手表挑战华为苹果
2015-03-04 10:35 6132015年的春节刚过,苹果、华为、三星就紧锣密鼓的发布了各自 ... -
TWaver矢量小试——Android演进路线图
2015-02-02 11:56 1231还有半个多月就到春节了,年底相信很多公司都会进行年度总结以及 ... -
用TWaver加载大型游戏场景一例
2015-01-06 13:52 730游戏中经常会出现一些大型的户外场景,例如一个小镇、一座古城等 ... -
22万个木箱!TWaver 3D极限压榨
2014-12-29 11:31 899打开个门户网站都千呼万唤,我们还能期待网页上的3D技术会有 ... -
巧用TWaver 3D 矢量图形功能
2014-10-29 11:14 593的确,提起TWaver,大家想到的首先是“电信拓扑图组件”。 ... -
TWaver GIS在电信中的使用
2014-10-09 14:56 545GIS作为信息系统的重要组成部分,在电信行业中的应用由来已久。 ... -
如何创建环型、树型双层布局
2014-09-19 10:58 828TWaver的Demo中有常用的环型布局和树型布局,但是当网 ... -
如何创建发光的环路
2014-09-16 13:44 799先看看发光链路的运行效果:在这个Demo中主要包含三个技术 ... -
Autolayout性能优化
2014-09-03 11:05 982客户的需求就是我们进步的动力。最近有客户提出大数据量Top ... -
DNA分子结构3D模型
2014-08-21 15:16 888生物信息资源更新越来 ... -
TWaver版3D化学元素周期表
2014-07-14 10:17 1723很早就有人做3D网页版的化学元素周期表了,酷炫效果和新鲜技巧 ... -
在MONO Design中使用Flex3D
2014-07-08 10:04 679在项目开发组的努力下,HTML5 3D 的开发包变得越来越优 ... -
TWaver 3D技术在油田行业的应用
2014-05-26 15:29 677油田信息化是是数字油 ... -
用TWaver实现组合的Chart
2013-01-21 12:14 1423TWaver组件中提供了一些通用的Chart,比如Line ... -
TWaver Java内存占用测试
2012-12-25 13:50 868TWaver Java的性能大家有 ... -
TWaver With JavaFX
2012-10-10 18:08 817JavaFX Script被抛弃以后,很久不关心JavaFX了 ... -
如何让HTML5的表格支持后台排序与分页
2012-08-21 17:41 1380TWaver HTML5发布已有一段时间,使用的客户也是逐渐增 ... -
自定义Background
2012-08-17 12:08 952TWaver提供了ImageBackground来为TNetw ...
相关推荐
除此之外,为了实现文件的创建、删除、重命名等操作,需要编写额外的逻辑,并确保这些操作符合文件系统的规则。这通常涉及到`java.io`包中的类,如`File`,以及`javax.swing.filechooser`包中的`JFileChooser`,用于...
在Java编程中,`JTree`是Swing库中的一个组件,用于展示树形数据结构。这个组件在GUI(图形用户界面)应用中非常常见,因为它可以清晰地展示层次关系的数据,比如文件系统目录结构。在Java中动态实现二叉树,即在...
**JTree2.0 目录树 菜单导航** `JTree2.0` 是一个基于 `JavaScript` 的目录树组件,用于构建可交互的树形菜单导航系统。这个组件在各种主流浏览器上经过了测试,确保了良好的兼容性和用户体验。在网页设计和开发中...
JTree是一款非常实用的JavaScript实现的目录树插件,它允许开发者轻松地创建动态、可扩展的无限层级的目录树结构。对于学习和使用目录树的开发者来说,JTree是一个极具价值的工具。 **1. 功能特性** JTree具有以下...
在实际项目中,`JTree`常用于文件系统浏览、数据库结构展示、组织结构图等场景。通过熟练掌握`JTree2.0`,你可以创建出功能强大且用户友好的图形界面,提升应用程序的易用性和专业性。记得不断探索和实践,才能充分...
在IT领域,尤其是在Web开发中,`JTree`是一个常用组件,它用于在用户界面中展示数据的层次结构,比如文件系统、组织架构等。...下面我们将深入探讨`JTree`的实现...理解这些知识点对于构建和维护自己的JTree实现至关重要。
本文主要关注的是使用JAXP中的DOM接口来分析XML文档,并结合Java Swing库中的JTree组件,实现XML文档内容的图形化展示。DOM是一种将XML文档加载到内存中形成树形结构的模型,方便开发者通过节点操作来访问和修改XML...
**includes** 文件夹可能包含其他必要的资源文件,如JavaScript脚本或额外的配置文件,这些文件可能与JTree的实现或示例有关。 通过深入学习这些文件,开发者可以全面掌握JTree2.0的使用,为自己的Java应用程序构建...
在Java Swing库中,`JTree`是一个非常重要的组件,用于在用户界面中展示层次结构的数据,...通过学习和实践,你可以进一步掌握如何利用`JTree`实现复杂的功能,如自定义节点图标、动态更新树结构以及与其他组件的交互。
本示例程序“javaJTree编程(源代码)”提供了一个简单的JTree实现,适合初学者学习和作为模块化代码使用。 首先,我们要理解JTree的基本结构。JTree是由TreeNode对象构成的,每个TreeNode代表树中的一个节点。...
这个“Swing-JTree.rar”文件包含了一个关于JTree的经典示例,名为“jtree树案例”,这将帮助我们更好地理解和使用这个组件。 JTree的主要功能: 1. **显示层次结构数据**:JTree可以用来表示和展示具有层级关系的...
标题“JTree 更新版 不错的树形控件”表明这是一个经过更新优化的JTree实现,可能包含了一些增强功能或改进。 描述中提到的“treeNodes(数组形式)”是指JTree的数据模型,通常由DefaultTreeModel类处理。这个模型...
JTree是由TreeNode对象组成的树形结构,TreeNode是树节点的抽象类,它的子类DefaultMutableTreeNode是最常用的实现。每个节点可以有任意数量的子节点,并且可以通过JTree的模型(TreeModel)来添加、删除或修改这些...
在`SystemFileTree.java`这个源文件中,很可能包含了实现文件系统树的代码。它可能使用`java.io.File`对象作为`TreeNode`的子类,通过递归遍历文件系统目录,构建`DefaultTreeModel`。同时,该文件可能也包含了对`...
`JTree`继承自`JComponent`类,并且实现了`AccessibleContext`接口。 #### 构造方法 `JTree`提供了多种构造方法以适应不同的应用场景: 1. **无参构造方法**:`JTree()`。创建一个空的树。 2. **使用`Hashtable...
在Java编程领域,JTree是Swing库中的一个重要组件,用于展示树形数据结构。它在用户界面设计中扮演着重要角色,特别是在处理文件系统、组织层次结构信息或表示复杂对象结构时。JTree的应用广泛且实用,让我们深入...
例如,服务器端可以通过 `ajax` 请求获取并更新树的数据,然后客户端使用 JavaScript 更新 `JTree` 的模型,实现动态加载和交互。 ### 实战应用 在实际开发中,`JTree` 常用于文件管理器、软件设置界面、数据库...
"用XML来配置的多级目录树菜单插件JTree2.0"是一个专注于实现这一功能的工具,特别强调了通过XML文件进行配置的能力。以下是关于这个插件及其相关知识点的详细介绍。 **JTree插件**: JTree是Java Swing库中用于...