`

JavaFX学习之TreeView

阅读更多
  这段代码是从网上看到的,开始自己写一个目录结构的时候,写的好麻烦。首先我开始时读父目录结构,然后点击展开事件的时候读取该子目录结构,其中遇到了许多问题。虽然写出来了,但是乱七八糟。看了下面这段代码,发现自己还是对类不了解。
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的小游戏,一个高手写的
http://lustrezhang.gotoip4.com/fxgame/

这里有个javafx学习的中文网站,我把内容都丢那上面去了。
http://www.jfxee.com/
  • 大小: 711 Bytes
分享到:
评论

相关推荐

    JavaFX TreeView数据库加载Node的实例

    JavaFX的TreeView组件是用于构建层次结构数据视图的强大工具,它可以用来展示树形结构的信息,如文件系统、组织结构等。在这个实例中,我们将深入探讨如何将数据库中的数据加载到JavaFX的TreeView中,创建一个动态的...

    Draggable-JavaFX-TreeView:对JavaFX中TreeView的CellFactory的拖放实现,用于包含子项的项和包含子项的项

    Draggable-JavaFX-TreeView 对JavaFX中TreeView的CellFactory的拖放实现,用于项目和包含子项的项目(文件夹)。 添加为依赖项: 该项目已发布到Maven Central( ),可以使用以下依赖项进行添加: &lt;groupId&gt;me...

    javafx treeview 树形菜单渲染公用接口

    javafx treeview 树形菜单一行代码渲染接口源码,通过一个sql查询结果集,调用该源码公共接口,直接渲染模型。该算法,解决了遍历的空间复杂度,时间复杂度问题,合理利用java的对象引用概念。灵活指向父子对象,...

    treeview绑定数据代码

    在.NET开发环境中,TreeView控件是一种常用的用户界面元素,它以树形结构显示数据,常用于网站或桌面应用中展示层级关系的数据。本教程将详细讲解如何使用TreeView控件来绑定SQL数据库中的数据,以“treeview”表为...

    JavaFX实现拖拽结点效果

    JavaFX实现拖拽结点效果 JavaFX 是一个基于 Java 技术的 GUI 编程框架,它提供了一个强大的平台来开发桌面应用程序。在 JavaFX 中,实现拖拽结点效果是一种常见的用户交互方式,以下是 JavaFX 实现拖拽结点效果的...

    javafx资料

    JavaFX提供了丰富的预定义控件,如按钮(Button)、文本框(TextField)、标签(Label)、列表视图(ListView)和树视图(TreeView)等。每个控件都有独特的属性和方法,理解并熟练使用这些控件是构建用户界面的...

    JavaFX 8官方指导

    通过学习本书,开发者不仅可以掌握如何利用JavaFX提供的丰富UI组件来快速搭建界面,还能深入了解JavaFX API的各种特性和功能,从而更好地进行实际项目开发。此外,书中还提到了关于版权、许可以及特定情况下适用的...

    Learn JavaFX 8

    ### JavaFX 8 学习指南 #### 一、引言 JavaFX 是 Oracle 公司为 Java 平台提供的一套丰富的用户界面框架,它旨在替代早期的 AWT 和 Swing,提供更现代、功能更强大的图形用户界面开发工具。本书《Learn JavaFX 8》...

    基于netbeans+javafx+fxml的基本控件的使用

    在JavaFX中,开发者可以利用丰富的图形用户界面(GUI)组件来构建桌面应用程序。这个教程主要关注在NetBeans集成开发环境中使用JavaFX和FXML进行...在NetBeans的辅助下,学习和使用JavaFX+FXML会变得更加高效和便捷。

    javafx模拟磁盘管理系统

    这个"javafx模拟磁盘管理系统"项目涵盖了JavaFX的基本使用,文件操作,事件处理,以及UI设计等多个方面,对于学习和实践JavaFX技术是个很好的案例。开发者可以在此基础上进一步完善功能,如增加搜索、排序、过滤等...

    Mastering JavaFX 8 Controls

    本书《Mastering JavaFX 8 Controls》由 Hendrik Ebbers 编写,是针对 JavaFX 8 控件深入学习的宝贵资源。该书覆盖了 JavaFX 8 控件的各个方面,帮助读者从初学者成长为精通控件的专家。 #### 二、JavaFX 8 控件...

    递归选中TreeView当前结点的所有子结点

    在编程领域,`TreeView`控件是常见的图形用户界面元素,尤其在Windows应用程序开发中广泛使用。它允许用户以树状结构展示数据,通常用于层级关系的表示,如文件系统、组织结构等。本篇文章将深入探讨如何通过递归...

    JavaFX CSS Reference Guide

    JavaFX是Oracle公司推出的用于构建富互联网应用程序(RIA)的开源框架,它提供了一整套用于构建图形用户界面的组件和API。JavaFX的用户界面控件样式可以通过CSS(层叠样式表)进行定制。本指南为JavaFX CSS的参考资料...

    javafx ui controls

    通过本文档的学习,我们了解了 JavaFX UI 控件的基本使用方法。掌握了这些控件之后,你可以根据实际项目需求灵活地构建各种类型的用户界面。无论是简单的应用还是复杂的商业系统,JavaFX 都能提供所需的功能和支持,...

    IPtry_javaFx_javafx可视化ui_

    标题中的“IPtry_javaFx_javafx可视化ui_”表明这是一个使用JavaFX...总的来说,这个项目涵盖了JavaFX的UI设计、网络编程、多线程、数据包捕获与解析等多个方面的知识,是一个很好的学习和实践JavaFX和网络编程的实例。

    javafx解析xls文档

    接下来,我们需要创建一个JavaFX控件,如TableView或TreeView,用于显示解析后的Excel数据。这样用户就可以直观地查看和操作数据。例如,我们可以创建一个`TableView`并定义相应的列: ```java TableView[]&gt; ...

    Learn JavaFX 8.pdf

    《Learn JavaFX 8.pdf》是一本关于JavaFX 8开发的详细教材,涵盖了JavaFX编程的众多方面。JavaFX是一种用于构建富客户端应用...教材的结构和内容安排对于想要深入学习JavaFX的开发者来说,是一本非常有价值的参考资料。

    javafx+geotools实现shape读写工具

    4. **JavaFx实现页面**:在JavaFX中,我们可以使用`TableView`或`TreeView`展示shape文件的属性。`TableView`适合二维表格数据,而`TreeView`适用于层次结构数据。通过`CellFactory`可以自定义单元格显示。此外,...

    Java学习指南19 JavaFX入门

    这是『Java学习指南系列』的第19篇教程 ,是Java开发的高级课程,介绍JavaFX的入门技术。 JavaFX教程分为2篇:JavaFX入门篇 , JavaFX高级篇。 二、主要内容? 本篇介绍JavaFX的基本技术,至少包括以下方法:* 基本...

    JavaFX蟹堡王餐厅管理系统

    "购物车"模块则可能使用了ListView或TreeView来展示选定的菜品,同时有加减数量和结算功能。"订单管理"部分可能涉及到数据库操作,JavaFX与Java的JDBC(Java Database Connectivity)相结合,实现数据的增删改查,...

Global site tag (gtag.js) - Google Analytics