- 展示树重写了TreeItem的2个方法:
- getChildren(); 在展开的时候会去获取子节点,对每一个file进行一次是否有子文件判断,notInitialized即是做一次判断。有子文件,便遍历new TreeItem,并且加到该节点children里面。
- isLeadf; 用于判断该节点是否是叶子节点,叶子节点没有展开箭头。
- 重写CellFactory方法,是对节点的内容进行改变。当cell里面的内容改变时,调用该方法。empty这个boolean是指该cell有没有与与数据关联,因为在扩大页面的时候,那些新显示出来的cell是没有值联系的,所以当为true时,赋值为null。
- CheckBoxTreeItem<String>有些已经帮你写的TreeItem,就不必要自己构造了。
- 展示的时候出了点问题,那个文件图片显示的有点不对,没发现为什么了,代码里面明明没有做,可是显示了,希望能找出来。
- 本例子具体请参考:http://mxcyk.com/?post=170
- 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("mxcyk.com.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.setTitle("梦续残缘工作室 mxcyk.com");
- 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.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();
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/100320148926.html
来源: http://www.codesnippet.cn/detail/100320148926.html