这段代码是从网上看到的,开始自己写一个目录结构的时候,写的好麻烦。首先我开始时读父目录结构,然后点击展开事件的时候读取该子目录结构,其中遇到了许多问题。虽然写出来了,但是乱七八糟。看了下面这段代码,发现自己还是对类不了解。
展示树重写了TreeItem的2个方法:
getChildren(); 在展开的时候会去获取子节点,对每一个file进行一次是否有子文件判断,notInitialized即是做一次判断。有子文件,便遍历new TreeItem,并且加到该节点children里面。
isLeadf; 用于判断该节点是否是叶子节点,叶子节点没有展开箭头。
重写CellFactory方法,是对节点的内容进行改变。当cell里面的内容改变时,调用该方法。empty这个boolean是指该cell有没有与与数据关联,因为在扩大页面的时候,那些新显示出来的cell是没有值联系的,所以当为true时,赋值为null。
CheckBoxTreeItem<String>有些已经帮你写的TreeItem,就不必要自己构造了。
展示的时候出了点问题,那个文件图片显示的有点不对,没发现为什么了,代码里面明明没有做,可是显示了,希望能找出来。
后来我又加了一个判断就没出现
这里有很多javafx的小游戏,一个高手写的
[url]http://lustrezhang.gotoip4.com/fxgame/[/url]
这里有个javafx学习的中文网站,我把内容都丢那上面去了。
http://www.jfxee.com/
package ui;
import java.io.File;
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
import javafx.util.Callback;
public class TestTreeView extends Application{
ImageView iv = new ImageView(new Image(getClass().getResourceAsStream("folder_16.png")));
public static void main(String args[]){
launch();
}
@Override
public void start(Stage stage) throws Exception {
HBox box = new HBox();
buildTree(box);
stage.setScene(new Scene(box,400,800));
stage.show();
}
public void buildTree(HBox box){
File file = new File("C:/");
TreeView<File> treeView = new TreeView<File>(new MyTreeItem(file));
treeView.setCellFactory(new Callback<TreeView<File>, TreeCell<File>>() {
@Override
public TreeCell<File> call(TreeView<File> arg0) {
return new TreeCell<File>(){
@Override
protected void updateItem(File f, boolean empty) {
// TODO Auto-generated method stub
super.updateItem(f, empty);
if(empty){
setText(null);
setGraphic(null);
}else{
setText(f.getName());
if(f.isDirectory()){
setGraphic(iv);
}else if(f.isFile()){
setGraphic(null);
}else if(f.getName().endsWith("txt")){
setStyle("-fx-font-weight:BOLD");
}else{
setStyle("-fx-text-fill:#cccccc");
}
}
}
};
}
});
box.getChildren().add(treeView);
HBox.setHgrow(treeView, Priority.ALWAYS);
}
}
class MyTreeItem extends TreeItem<File>{
private boolean notInitialized = true;
public MyTreeItem(final File file){
super(file);
}
@Override
public ObservableList<TreeItem<File>> getChildren(){
if(notInitialized){
notInitialized = false;
if(getValue().isDirectory()){
for(final File file:getValue().listFiles()){
super.getChildren().add(new MyTreeItem(file));
}
}
}
return super.getChildren();
}
@Override
public boolean isLeaf(){
return !getValue().isDirectory();
}
}
展示树重写了TreeItem的2个方法:
getChildren(); 在展开的时候会去获取子节点,对每一个file进行一次是否有子文件判断,notInitialized即是做一次判断。有子文件,便遍历new TreeItem,并且加到该节点children里面。
isLeadf; 用于判断该节点是否是叶子节点,叶子节点没有展开箭头。
重写CellFactory方法,是对节点的内容进行改变。当cell里面的内容改变时,调用该方法。empty这个boolean是指该cell有没有与与数据关联,因为在扩大页面的时候,那些新显示出来的cell是没有值联系的,所以当为true时,赋值为null。
CheckBoxTreeItem<String>有些已经帮你写的TreeItem,就不必要自己构造了。
展示的时候出了点问题,那个文件图片显示的有点不对,没发现为什么了,代码里面明明没有做,可是显示了,希望能找出来。
后来我又加了一个判断就没出现
else if(f.isFile()){ setGraphic(null);
}
这里有很多javafx的小游戏,一个高手写的
[url]http://lustrezhang.gotoip4.com/fxgame/[/url]
这里有个javafx学习的中文网站,我把内容都丢那上面去了。
http://www.jfxee.com/