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的节点进行交互。

你可能感兴趣的:(javafx)