javafx实现树结构treeview

如果我没记错,javafx1.2是不支持treeview的,为了实现一个treeview,还借用了jfxtras组织的一个框架,1.3提供了对treeview的支持,当时一个叫Rakesh Menon的阿三哥在他的博客上[url=http://rakeshmenonp.wordpress.com/2010/05/10/javafx-1-3-treeview/]http://rakeshmenonp.wordpress.com/2010/05/10/javafx-1-3-treeview/[/url]发表了如何利用treeview来读取一个系统目录结构,展示端他用的是以当前目录作为书节点名,并对当前节点进行循环,如何依照给定的xml文件进行操作,把文件内容进行树状展示,遇到了一个展示内容方面的问题,对此,我对TreeItem进行了扩展,通过对这个类的扩展增加展示元素属性,并利用传统的dom4j方式对xml文件进行读取。下面是我的实现:
import javafx.scene.CustomNode;
import javafx.scene.Node;
import com.javafx.preview.control.TreeView;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.Element;
import com.javafx.preview.control.TreeItemBase;
import javafx.scene.Group;
import javafx.scene.Cursor;
/**
* @author fuqingyan
*/
public class TreeViewNode extends CustomNode {

public var width: Number;
public var height: Number;
var reader: SAXReader = new SAXReader();
var doc: Document = reader.read("{__DIR__}test.xml");
var tree: TreeView = TreeView {
cursor: Cursor.HAND
root: TreeItemExt {
data: doc.getRootElement().getName()
element: doc.getRootElement()
expanded: false
isLeaf: isLeaf
createChildren: createChildren;
}
width: bind width / 5
height: bind height
}

override public function create(): Node {
Group {
content: bind [
tree ]
}
}

function createChildren(item: TreeItemBase): TreeItemBase[] {

def itemEx = item as TreeItemExt;
def elm = itemEx.element as Element;
if (elm.elements().size() > 0) {
return for (e in elm.elements()) {
var binds = e as Element;
TreeItemExt {
data: binds.attributeValue("name");
element: binds
createChildren: createChildren;
isLeaf: isLeaf;
}
};
}
return [];
}
function isLeaf(item: TreeItemBase): Boolean {
def itemEx = item as TreeItemExt;
def elm = itemEx.element as Element;
return elm.elements().size() < 1;
}

下面是扩展TreeItem

import com.javafx.preview.control.TreeItem;
import org.dom4j.Element;

/**
* @author fuqingyan
*/

public class TreeItemExt extends TreeItem {

public var element: Element;
}


稍微做下说明,TreeItem TreeView TreeItemBase这几个类之间的关系看一下api文档,如果重写了createChildren方法,就一定要重写isLeaf。
fx方面的ide,NetBeans的比Eclipse的要好一点,我个人实践后的体会。
给定一个xml格式的文件,读取后就可以树状展示出来了,有空继续写一下操作treeview的节点进行交互。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值