DOC-03-28 文件选择框(File Chooser)

本章解释了如何使用FileChooser类来让用户浏览文件系统。在本章中提供的样例程序解释了如何打开一个或多个文件,配置一个文件选择对话框并且保存应用程序内容。

与其它UI控件类不同,FileChooser类并不属于javafx.scene.controls包。然而这个类值得在JavaFX UI控件教程中被提到,因为它支持一个经典的GUI应用程序功能:文件系统浏览。

FileChooser类在javafx.stage包中,它与其它基本根图形元素在一起,例如Stage、Windows和Popup。在图28-1中的“View Pictures”窗体是一个在Windows操作系统中的文件选择对话框样例。

28–1文件选择框样例

3-28-1 file-chooser-sample

打开文件

一个文件选择器可以用于调用一个“打开”对话框窗体来选择一个或多个文件,并且可以启用文件保存对话框窗体。为了展示一个文件选择框,一般可以使用FileChooser类。例28-1展示了在应用程序中启用文件选择框的最简单方式。

28-1 展现一个File Chooser

在例28-1的代码添加到JavaFX应用程序之中后,当应用程序启动时将会立即显示对应的文件选择对话框窗体,如图28-2.

28-2 简单的File Chooser

3-28-2 file-chooser-simple

注意:图28-2展示了Windows操作系统中的文件选择器。当你在其它支持这个功能的操作系统中打开文件选择器时,你将会看到不同的窗体。图28-3和图28-4展示了在Linux和Mac OS中的文件选择框样例。

28–3 Linux操作系统中的File Chooser 窗体

3-28-3 file-chooser-linux

28-4 Mac OS中的File Chooser

3-28-4 file-chooser-mac

尽管在前面的样例中文件选择器都会在应用程序启动时自动出现,但是一个更为典型的应用方式是在选择了对应的菜单项或点击了特定的按钮时调用文件选择框。在本教程中,你会创建一个应用程序,它会允许用户点击一个按钮并且打开文件系统中的一张或多张图片。例28-2展示了FileChooserSample应用程序的代码,它实现了这个功能。

28–2 打开FileChooser来选择一个或多个文件

在例28-2中,“Open a Pickture”按钮允许用户来选择一个文件,而“Open Pictures”按钮则允许用户打开一个文件选择框选择多个文件。这些按钮setOnAction方法基本是一样的,它们唯一的不同在于调用FileChooser的方法。

· showOpenDialog方法显示了一个新的打开文件对话框,在里面可以选择一个文件。该方法的返回值为用户选择的文件,或者在用户没有选择文件时返回null。

· showOpenMultipleDialog方法显示了一个新打开的文件对话框,在里面可以选择多个文件。该方法返回值为由用户选择的多个文件list,或者在用户没有选择文件时返回null。返回的list不可以修改,如果尝试修改它则会抛出UnsuportedOperationException。

两个方法都不会在所显示的对话框窗体消失前返回(换言之,直到用户提交或取消选择)。

当你编译并运行FileChooserSample应用程序时,它将会产生如图28-5所示的窗体。

28-5 带有两个按钮的FileChooserSample程序

3-28-5 file-chooser-with-buttons

如果你点击了其中一个按钮,将会显示如图28-6所示的对话框窗体。被打开的文件选择框窗体会显示你的操作系统中的默认位置。

28–6默认的File Chooser 窗体

3-28-6 file-chooser-default

FileChooserSample应用程序的用户可能会导航到一个包含图片的文件夹并选择一张图片。当一个文件被选择后,它将会使用关联应用程序来打开。样例代码通过使用java.awt.Desktop类的Open方法来实现此功能:desktop.open(file);。

注意:Desktop类的可用性是独立于平台的。参考Desktop类的API文档来了解更多的相关信息。你也可以使用isDesktopSupported()方法来检查你的操作系统是否支持它。

你可以通过指定包含图片的文件选择目录来改善此程序的用户体验。

配置一个File Chooser

你可以通过设置FileChooser对象的initialDirectory和title属性来配置文件选择对话框窗体。例28-3展示了如何来指定初始化目录和一个合适的标题来预览并打开图片。

28-3 设置初始化目录和窗体标题

configureFileChooser方法将标题设置为了“View Picktures”并且将文件路径指定为用户目录,该目录下包含My Pictures子目录。当你编译运行FileChooserSample并点击其中一个按钮时,将会显示如图28-7所示的文件选择框。

28-7 打开一个图片库

3-28-7 file-chooser-pictures

你也可以让用户通过使用DirectoryChooser类来指定目标目录。在例28-4中代码片段中,点击browserButton按钮会调用directoryChooser.showDialog方法。

28-4 使用DirectoryChooser

在作出了选择之后,你可以使用如下的代码来将对应的值分配给文件选择框:fileChooser.setInitialDirectory(selectedDirectory);。

设置扩展名过滤器(Extension Filter)

根据下面的配置项,你可以设置扩展名过滤器(Extension Filter)来决定哪些文件可以在文件选择框中可以被打开,如例28-5所示。

28–5 设置一个图片类型过滤器

在例28-5中,你使用FileChooser.ExtensionFilter来设置了一个extension filter,它定义了这些文件类型是可以选择的:所有的图片文件、JPG和PNG。

当你编译、运行例28-5中的FileChooserSample代码时,点击其中的一个按钮,对应的扩展名过滤器将会出现在文件选择框窗体中。如果一个用户选择了JPG,那么在文件选择框中将会仅显示JPG类型的图片。图28-8是在My Pictures目录中选择JPG图片时的截屏。

28-8 File Chooser中过滤JPG文件

3-28-8 file-chooser-jpg

保存文件

除了打开和过滤文件,FileChooser API还提供了让用户指定一个文件名(及其在文件系统中的位置)来在应用程序中保存文件。FileChooser类的showSaveDialog方法会打开一个保存对话框窗体。与其他展示对话框的方法一样,showSaveDialog方法返回了被用户选择的文件或者当没有作出选择时返回null。

例28-6中的代码片段扩展了菜单样例。它为上下文菜单新增了一个菜单项用于在文件系统中保存被显示的图片。

28-6 使用FileChooser类来保存图片

将例28-6添加到MenuSample应用程序之中(找到程序文件中的源码)后,编译、运行之,当你启用Save Image菜单项时将会见到如图28-9所示的界面。

28-9 保存图片

3-28-9 file-chooser-save

在用户选择Save Image菜单项之后,将会显示如图28-10所示的Save Image窗体。

28-10 保存图片窗体

3-28-10 file-chooser-save-image

Save Image窗体与一般的保存对话框窗体的用户体验一致:用户需要选择目标文件夹,输入待保存的文件名,并且点击Save按钮。

相关的API文档

· FileChooser

· DirectoryChooser

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2015/04/doc03_filechooser/
百度已收录