Javafx简单实现【我的电脑资源管理器】效果

本文实例讲述了Javafx简单实现【我的电脑资源管理器】效果。分享给大家供大家参考。具体如下:

1. java代码:

package ttt;
import java.io.File;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TreeItem;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
import javafx.scene.control.TreeView;
import javafx.scene.control.cell.PropertyValueFactory;
public class TreeViews extends Application {
  public static ObservableList<FileDetail> data = FXCollections.observableArrayList();
  public static void main(String[] args) {
    launch(args);
  }
  @Override
  public void start(Stage primaryStage) {
    primaryStage.setTitle("Javafx 实现\"我的电脑\"资源管理器");
    TreeItem<File> rootItem = new TreeItem<>(new File(System.getenv("COMPUTERNAME")));
    for (File file : File.listRoots()) {
      FileTreeItem rootsitem = new FileTreeItem(file);
      rootItem.getChildren().add(rootsitem);
    }
    TreeView<File> tree = new TreeView<File>(rootItem);
    HBox root = new HBox();
    TableView<FileDetail> tableView = new TableView<>(data);
    TableColumn<FileDetail, String> firstColumn = new TableColumn<>("文件");
    firstColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("FileName"));
    firstColumn.setPrefWidth(120);
    TableColumn<FileDetail, String> secondColumn = new TableColumn<>("类型");
    secondColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("type"));
    secondColumn.setPrefWidth(120);
    TableColumn<FileDetail, String> thirdColumn = new TableColumn<>("最后修改");
    thirdColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("LastModified"));
    thirdColumn.setPrefWidth(200);
    tableView.getColumns().setAll(firstColumn, secondColumn, thirdColumn);
    HBox.setHgrow(tree, Priority.ALWAYS);
    HBox.setHgrow(tableView, Priority.ALWAYS);
    root.getChildren().addAll(tree,tableView);
    tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<File>>() {
      @Override
      public void changed(ObservableValue<? extends TreeItem<File>> observable, TreeItem<File> oldValue,
          TreeItem<File> newValue) {
        ObservableList<TreeItem<File>> treelist = newValue.getChildren();
        ObservableList<FileDetail> tablelist = FXCollections.observableArrayList();
        for (TreeItem<File> item : treelist) {
          FileDetail filedetail = new FileDetail(item.getValue());
          tablelist.add(filedetail);
        }
        data.setAll(tablelist);
      }
    });
    primaryStage.setScene(new Scene(root));
    primaryStage.setHeight(600);
    primaryStage.show();
  }
}

2. java代码:

package ttt;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDetail {
  private String FileName;
  private String LastModified;
  private boolean isFile;
  private boolean isFolder;
  private boolean exists;
  private String type;
  private long length;
  private SimpleDateFormat fmt;
  public FileDetail(File file) {
    isFile = file.isFile();
    isFolder = file.isDirectory();
    exists = file.exists();
    if (exists) {
      this.FileName = file.getName();
      fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
      Date date = new Date(file.lastModified());
      this.LastModified = fmt.format(date);
      this.length = file.length();
      if (isFolder) {
        this.type = "Folder";
      } else
        this.type = String.valueOf(this.length / (long) 1024) + "KB";
    }
  }
  public String getFileName() {
    return FileName;
  }
  public void setFileName(String fileName) {
    FileName = fileName;
  }
  public String getLastModified() {
    return LastModified;
  }
  public void setLastModified(String lastModified) {
    LastModified = lastModified;
  }
  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }
  public long getLength() {
    return length;
  }
  public void setLength(long length) {
    this.length = length;
  }
}

3. java代码:

package ttt;
import java.io.File;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TreeItem;
public class FileTreeItem extends TreeItem<File> {
   private boolean isLeaf;
   private boolean isFirstTimeChildren = true;
   private boolean isFirstTimeLeaf = true;
  public FileTreeItem(File file) {
    super(file);
  }
  @Override
  public ObservableList<TreeItem<File>> getChildren() {
     if (isFirstTimeChildren) {
      isFirstTimeChildren = false;
       super.getChildren().setAll(buildChildren(this));
    }
      return super.getChildren();
  }
  @Override
  public boolean isLeaf() {
    if (isFirstTimeLeaf) {
      isFirstTimeLeaf = false;
      File f = (File) getValue();
      isLeaf = f.isFile();
    }
    return isLeaf;
  }
private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) {
  File f = TreeItem.getValue();
  if (f != null && f.isDirectory()) {
    File[] files = f.listFiles();
    if (files != null) {
      ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
      for (File childFile : files) {
        children.add(new FileTreeItem (childFile));
      }
      return children;
    }
  }
  return FXCollections.emptyObservableList();
}
}

4. 运行效果截图:

希望本文所述对大家的java程序设计有所帮助。

(0)

相关推荐

  • 基于socket和javaFX简单文件传输工具

    本文实例介绍了基于socket和javaFX简单文件传输工具,分享给大家供大家参考,具体内容如下 package application; import java.io.File; import org.james.component.ButtonBox; import org.james.component.FileReceiverGrid; import org.james.component.FileSenderGrid; import javafx.application.Applica

  • JavaFX之TableView的使用详解

    TableView,算是一个很重要的控件,几乎随处可见,而且功能强大,数据展示效果良好.所以,在JavaFX中,我们自然而然也应该学习一下TableView的使用. 下面我们先看看TableView的效果图: 每一列都是一个TableColumn,我们可以直接创建也可以在JavaFX Scene Builder中创建好. TableView的数据填充,需要一个ObservableList.其中需要一个类来做数据填充. 下面看看我们数据填充的类: 复制代码 代码如下: import javafx.

  • 利用JavaFX工具构建Reactive系统

    JavaFX 是Java中用来构建图形应用程序的新的标准库, 但许多程序员仍然坚持在使用Swing甚至AWT.关于如何利用JavaFX工具集中的新的超棒特性来构建响应式的快速应用程序,这里有一些建议! 1. 属性值 如果你对JavaFX组件做过完整的了解,移动遇到过属性(Property)这个东西.FX库中几乎每个值都可以被观察,分区(divider)的宽度,图片的尺寸,文本标识(label)中的文字,一个列表中的子项以及复选框(checkbox)的状态.属性分成另类:可写属性和可读属性.可写值

  • javafx实现图片3D翻转效果方法实例

    实现步骤: 1.定义FlipView对象.包含以下属性: 复制代码 代码如下: //正面视图 public Node frontNode; //反面视图 public Node backNode; //是否翻转 boolean flipped = false; //翻转角度 DoubleProperty time = new SimpleDoubleProperty(Math.PI / 2); //正面翻转特效 PerspectiveTransform frontEffect = new Per

  • javafx tableview鼠标触发更新属性详解

    本文实例为大家分享了javafx tableview鼠标触发更新属性,供大家参考,具体内容如下 public class HoverCell extends TableCell<Person, String> { public HoverCell(StringProperty hoverProperty) { setOnMouseEntered(e -> hoverProperty.set(getItem())); setOnMouseExited(e -> hoverProper

  • JavaFX Application应用实例

    下面代码演示的是JavaFX进程命令行参数的实例.大家可以参阅一下. import java.util.List; import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.effect.SepiaTone; import javafx.scene.image.Imag

  • Java8新特性之JavaFX 8_动力节点Java学院整理

    JavaFX主要致力于富客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio,video,graphic,animation,3D等,同时采用现代化的css方式支持界面设计.同时又采用XUI方式以XML方式设计UI界面,达到显示与逻辑的分离.与android这方面确实有点相似性. JavaFX历史 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上

  • JavaFX 监听窗口关闭事件实例详解

    1.写在前面 在JavaFX的程序开发的时候,在使用多线程的时候,默认情况下在程序退出的时候,新开的线程依然在后台运行. 在这种情况下,可以监听窗口关闭事件,在里面关闭子线程. 2.具体实现的样例 package sample; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import java

  • Javafx简单实现【我的电脑资源管理器】效果

    本文实例讲述了Javafx简单实现[我的电脑资源管理器]效果.分享给大家供大家参考.具体如下: 1. java代码: package ttt; import java.io.File; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXColle

  • 详解用node搭建简单的静态资源管理器

    本文介绍了用node搭建简单的静态资源管理器,分享给大家,具体如下: 我么都知道,老牌的3p服务器都是自带静态资源管理器的.但是node不同,它没有web容器,它的路由地址和真实地址可以没有联系,所有node的优点,是可以把路由做得相当漂亮. 但静态资源管理器也是必不可少的东西,今天我主要用node的fs模块,自己手写一个简单的静态资源管理器. 首先,建一个static文件夹,所有的静态文件都将放到这个文件夹下 引包 var http = require("http"); var ur

  • 别惊讶,资源管理器也能管好注册表

    我们在编辑注册表时,都要先在开始菜单中点击运行项,然后输入"regedit"来打开注册表编辑器,这样的操作你是否厌倦?其实,我们可以换一种方式管理注册表--将注册表请进资源管理器中,这样,要对注册表"动手动脚"也更为方便.一.将注册表请进资源管理器 实现在资源管理器中编辑注册表并不难,只要按照以下步骤操作即可:    首先到http://www.regxplor.com/regxplor.dll下载资源管理器的一个控件,并将它复制到Windows安装路径下的syst

  • Android实现文件资源管理器雏形

    本文实例为大家分享了Android文件资源管理器雏形的实现代码,供大家参考,具体内容如下 学习Android,应该在掌握单个知识点之后,把多个知识点串联起来实现一些有一定代码量的小项目比较好.当然,这也是我教学中总结出来的一点经验心得,并不适合所有人. 先做需求分析(实现的功能): 1.ListView开始显示sdcard目录下的子目录和文件. 2.点击文件,Toast显示“点击的是文件” 3.点击目录,进入子目录,显示子目录下的子目录和文件. 4.back键回退到上层目录. 5.异常情况处理:

  • 使用AngularJS制作一个简单的RSS阅读器的教程

    简介 几年前,我用C#写了一个RSS阅读器,但是我想如果把它做成一个SPA(单页应用)效果会更好. Angular使一些事情变得简单,RSS阅读器就是其中之一. 我也用Twitter Bootstrap(做UI)实现了RSS阅读器,调试页面样式是最难的地方之一...可能是因为我不擅长css的原因. 背景 我有一些自己喜欢的网站( CodeProject, Dr.Dobb's Journal, ComputerWorld, Inc. Magazine). 然而,我发现其中很多网站都有烦人的广告.风

  • 使用HTML5+Boostrap打造简单的音乐播放器

    前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是jQuery的源码和Boostrap.js的源码,任务很艰巨呢,加油~在此就不整篇的贴代码了,如果感兴趣的小伙伴可以发消息给我,可以把代码传给你们~ 正文: 先上效果图 1.布局:Boostrap里的响应式和自适应布局是自然跑不掉的,container中嵌套row再分别嵌套aside和main(H5新

  • 简单了解JAVA内存区域效果知识

    这篇文章主要介绍了简单了解JAVA内存区域效果知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JAVA内存区域介绍 程序计数器: 线程私有,很小的内存空间,可以看做是当前线程所执行的字节码的行号指示器: 每个线程都有一个独立的程序计数器,各个线程之间的计数器相互不影响,独立存储: 如果线程执行的是Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果是一个Native方法,那么这个计数器的值则为undefined: 该内存

  • Python使用Tkinter实现滚动抽奖器效果

    年底,抽奖这个话题很多人都会讨论,都希望可以中奖. 接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器. 一.Tkinter简介 Tkinter 是 Python 的标准 GUI(Graphical User Interface,图形用户接口)库,Python 使用 Tkinter 可以快速地创建 GUI 应用程序. 在 Python2 和 Python3 中,Tkinter 都在标准库中,无需安装即可使用.在 Python2 中,这个库叫 Tkinter ,在

  • JavaScript实现抽奖器效果

    本文实例为大家分享了JavaScript实现抽奖器效果的具体代码,供大家参考,具体内容如下 这次实现的效果如下图: 所实现的功能是:当每次点击中间的抽奖按钮时,会随机选择一个盒子作为抽奖的结果. 那我们要如何实现抽奖的功能呢? 其实很简单,首先用html和css做出整体的框架,然后用js在中间按钮的onclick函数中设置定时器+随机改变某一盒子的背景颜色就可以了. 下面我们来讨论一下细节的方面: 1.设计整体框架时,我们需要为每个盒子设置边框,这时会发现边框会出现重叠问题,导致边框变厚,解决的

  • 简单实现轮播图效果的实例

    一.要点: 1.页面加载时,图片重合,叠在一起[绝对定位]; 2.第一张显示,其它隐藏; 3.设置下标,给下标设置颜色让它随图片移动; 4.鼠标移动到图片上去,显示左右移动图标,鼠标移走,继续轮播; 二.实现代码: html代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"

随机推荐