// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 向 Java 应用程序添加文件选择器
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 向 Java 应用程序添加文件选择器 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 向 Java 应用程序添加文件选择器

_撰稿人：Petr Dvoraklink:http://blogs.oracle.com/joshis/entry/a_quick_jfilechooser_demo[+（2009 年 12 月）+]，维护人：Alyona Stashkova_

本教程介绍了如何使用  ``javax.swing.JFileChooser``  组件向 Java 应用程序中添加文件选择器。可以手动编写所有代码，但使用 NetBeans GUI 构建器是明智的选择，它可以减轻工作量。在此练习中，将创建一个小的 Java 应用程序，用于将  ``.txt``  文件加载到文本区域中。

可以link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252FJFileChooserDemo.zip[+使用文件选择器下载生成的项目+]。


image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.0 及更高版本"]


*要学完本教程，您需要具备以下软件和资源。*

|===
|软件或资源 |要求的版本 

|link:http://netbeans.org/downloads/[+NetBeans IDE+] |版本 7.0 或更高版本 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包+] (JDK) |版本 6、7 或 8 
|===


== 创建应用程序

首先创建一个新的 Java 应用程序：

1. 从主菜单中，选择 "File"（文件）> "New Project"（新建项目）。选择 "Java" 类别和 "Java Application"（Java 应用程序）项目类型。单击 "Next"（下一步）。
2. 键入 `JFileChooserDemo` 作为项目名称，并指定项目位置。
3. 取消选中 "Create Main Class"（创建主类）复选框。

[.feature]
--
image::images/newproj-small.png[role="left", link="images/newproj.png"]
--


[start=4]
. 单击 "Finish"（完成）。


== 创建应用程序窗体

在本部分中，将创建  ``JFrame``  容器，并向其中添加几个组件。

*要创建 JFrame 窗体，请执行以下操作：*

1. 右键单击 "Source Packages"（源包）节点，然后选择 "New"（新建）> "Other"（其他）。选择 "Swing GUI Forms"（Swing GUI 窗体）类别和 "JFrameForm" 文件类型。单击 "Next"（下一步）。
2. 键入 `JFileChooserDemo` 作为类名。
3. 键入 `jfilechooserdemo.resources` 作为包。

[.feature]
--
image::images/newjframeform-small.png[role="left", link="images/newjframeform.png"]
--


[start=4]
. 单击 "Finish"（完成）。

[start=5]
. 在 "Properties"（属性）窗口中，输入 `Demo application` 作为 "Title"（标题）属性，然后按 Enter 键进行确认。

*将组件添加到 JFrame 窗体中：*

1. 在 "Palette"（组件面板）中，打开 "Swing Menus"（Swing 菜单）类别，选择 "Menu Bar"（菜单栏）组件，然后将其拖至 JFrame 的左上角。

*注：*如果未显示 "Palette"（组件面板），请从主菜单中选择 "Window"（窗口）> "Palette"（组件面板）。

[.feature]
--
image::images/menubaradded-small.png[role="left", link="images/menubaradded.png"]
--


[start=2]
. 右键单击 "Menu Bar"（菜单栏）组件的 "Edit"（编辑）项，然后在上下文菜单中选择 "Delete"（删除）。

[start=3]
. 要添加菜单项，以便从正在运行的应用程序打开文件选择器，请在 "Palette"（组件面板）的 "Swing Menus"（Swing 菜单）类别中，选择新的菜单项 (JMenuItem1)，然后将其拖放至 "Menu Bar"（菜单栏）的 "File"（文件）项。

[.feature]
--
image::images/menuitemadded-small.png[role="left", link="images/menuitemadded.png"]
--

*注：*请确保先选择 "Menu Bar"（菜单栏），然后再将其他菜单项拖至此处，以便将后者添加到 "Menu Bar"（菜单栏）中。


[start=4]
. 在 "Design"（设计）视图中右键单击 jMenuItem1，然后从上下文菜单中选择 "Change Variable Name"（更改变量名称）。将项重命名为 `Open`，然后单击 "OK"（确定）。

[start=5]
. 确保 jMenuItem1 在 "Design"（设计）视图中仍处于选中状态。按空格键编缉组件的文本。将文本更改为 `Open`，然后按 Enter 键进行确认。

[start=6]
. 为 "Open" 菜单项指定操作处理程序。右键单击菜单项，然后从上下文菜单中选择 "Events"（事件）> "Action"（操作）> "action Performed"（执行的操作）。GUI 构建器自动切换至 "Source"（源）视图，并构建名为  ``OpenActionPerformed()``  的新事件处理程序方法。"Navigator"（导航器）窗口应如下所示：

image::images/openactionperformednavigator.png[]


[start=7]
. 要添加菜单项，以便从正在创建的应用程序中退出文件选择器，并切换回 "Design"（设计）模式，请在 "Palette"（组件面板）的 "Swing Menus"（Swing 菜单）类别中，选择菜单项 (JMenuItem1)，然后将其拖至 "Menu Bar"（菜单栏）中 "Open" 菜单项的下方。请注意橙色的突出显示，表示要放置  ``JMenuItem1``  的位置。

[.feature]
--
image::images/highlighting-small.png[role="left", link="images/highlighting.png"]
--


[start=8]
. 在 "Design"（设计）视图中右键单击  ``jMenuItem1`` ，然后从上下文菜单中选择 "Change Variable Name"（更改变量名称）。将项重命名为 `Exit`，然后单击 "OK"（确定）。

[start=9]
. 确保  ``jMenuItem1``  在 "Design"（设计）视图中仍处于选中状态。按空格键编缉组件的文本。将文本更改为  ``Exit`` ，然后按 Enter 键进行确认。

[start=10]
. 为 "Exit" 菜单项指定操作处理程序。右键单击菜单项，然后从上下文菜单中选择 "Events"（事件）> "Action"（操作）> "action Performed"（执行的操作）。GUI 构建器自动切换至 "Source"（源）视图，并将构建名为 `ExitActionPerformed()` 的新事件处理程序方法。`ExitActionPerformed` 节点显示在 "Navigator"（导航器）窗口中 `OpenActionPerformed()` 节点的下方。

[start=11]
. 要使 "Exit" 菜单项正常工作，需要将以下源添加到 `ExitActionPerformed()` 方法的主体中：

[source,java]
----

			 System.exit(0); 
----

[start=12]
. 切换回 "Design"（设计）模式。从 "Palette"（组件面板）的 "Swing Controls"（Swing 控件）类别中，将文本区域 ( ``JTextArea`` ) 拖入窗体中，如下图所示。

[.feature]
--
image::images/textareadded-small.png[role="left", link="images/textareadded.png"]
--


[start=13]
. 调整已添加组件的大小，以便为文件选择器稍后显示的文本留出空间。将变量重命名为 `textarea`。此窗体应该类似于下面的屏幕快照：

[.feature]
--
image::images/jfilechooserdemoview_final-small.png[role="left", link="images/jfilechooserdemoview_final.png"]
--

您已设置了一个简单的 Java 应用程序作为本教程的基础。接下来，将添加实际的文件选择器。


== 添加文件选择器

1. 选择 "Window"（窗口）> "Navigating"（导航）> "Navigator"（导航器）以打开 "Navigator"（导航器）窗口（如果该窗口尚未打开）。
2. 在 "Navigator"（导航器）中，右键单击  ``Other Components`` （其他组件）节点。从上下文菜单中选择 "Add From Palette"（从组件面板上添加）> "Swing Windows"（Swing 窗口）> "File Chooser"（文件选择器）

除了  ``Add From Palette`` （从组件面板上添加）上下文菜单之外，还可以从 "Palette"（组件面板）的 "Swing Window"（Swing 窗口）将  ``JFileChooser``  组件拖放至 GUI 构建器的空白区域。结果是一样的，但操作上有一些困难，因为  ``JFileChooser``  的预览非常大，并且可能会不小心将窗口插入到错误的面板。


[start=3]
. 查看导航器，确认  ``JFileChooser``  已添加到窗体中。

[start=4]
. 右键单击  ``JFileChooser``  节点，并将变量重命名为 `fileChooser`。

image::images/navigator_jframe.png[]

您已添加了文件选择器。接下来，您要调整文件选择器以显示所需的标题，添加定制文件过滤器，然后将文件选择器集成到应用程序中。


== 配置文件选择器


=== 实现 "Open" 操作

1. 在 "Navigator"（导航器）窗口中单击选择  ``JFileChooser`` ，然后在 "Properties"（属性）对话框中编辑其属性。将  ``dialogTitle``  属性更改为 `This is my open dialog`，按 Enter 键，然后关闭 "Properties"（属性）对话框。
2. 单击 GUI 构建器中的 "Source"（源）按钮，以切换至 "Source"（源）模式。要将文件选择器集成到应用程序中，请将以下代码片段粘贴到现有的 `OpenActionPerformed()` 方法中。

[source,java]
----

private void OpenActionPerformed(java.awt.event.ActionEvent evt) {
    int returnVal = fileChooser.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        try {
          // What to do with the file, e.g. display it in a TextArea
          textarea.read( new FileReader( file.getAbsolutePath() ), null );
        } catch (IOException ex) {
          System.out.println("problem accessing file"+file.getAbsolutePath());
        }
    } else {
        System.out.println("File access cancelled by user.");
    }
} 
----

*注：*删除代码片段中与源文件中现有的第一行和最后一行重复的行。


[start=3]
. 如果编辑器报告了代码中有错误，则右键单击代码中的任意位置，然后选择 "Fix Imports"（修复导入）或按 Ctrl+Shift+I 键。在 "Fix All Imports"（修复所有导入）对话框中，接受默认值以更新导入的语句，然后单击 "OK"（确定）。

正如您所看到的，调用 FileChooser 的  ``getSelectedFile()``  方法来确认用户所单击的文件，以便您可以对其进行操作。本示例读取文件内容，并将其显示在文本区域中。


=== 实现文件过滤器

现在，您添加了使文件选择器只显示  ``*.txt``  文件的定制文件过滤器。

1. 切换至 "Design"（设计）模式，然后在 "Navigator"（导航器）窗口中选择  ``fileChooser`` 。
2. 在 "Properties"（属性）窗口中，单击  ``fileFilter``  属性旁边的省略号 ("...") 按钮。
3. 在 "File Filter"（文件过滤器）对话框的组合框中，选择 "Custom Code"（定制代码）。

[.feature]
--
image::images/combobox-small.png[role="left", link="images/combobox.png"]
--


[start=4]
. 在文本字段中键入  ``new MyCustomFilter()`` 。单击 "OK"（确定）。

[start=5]
. 要使定制代码正常工作，需要编写内部（或外部） ``MyCustomFilter``  类，以扩展  ``FileFilter``  类。复制以下代码片段，并将其粘贴到类的源代码中 import 语句的下方，以创建实现过滤器的内部类。

[source,java]
----

    class MyCustomFilter extends javax.swing.filechooser.FileFilter {
        @Override
        public boolean accept(File file) {
            // Allow only directories, or files with ".txt" extension
            return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");
        }
        @Override
        public String getDescription() {
            // This description will be displayed in the dialog,
            // hard-coded = ugly, should be done via I18N
            return "Text documents (*.txt)";
        }
    } 
----

*注：*要了解如何实现更智能的、可切换的文件过滤器，请参见 link:http://java.sun.com/javase/7/docs/api/javax/swing/JFileChooser.html#addChoosableFileFilter%28javax.swing.filechooser.FileFilter%29[+addChoosableFileFilter+] 方法。


== 运行应用程序

1. 右键单击 "JFileChooserDemo" 项目，然后选择 "Run"（运行），以启动样例项目。
2. 在 "Run Project"（运行项目）对话框中，选择 `jfilechooserdemo.resources.JFileChooserDemo` 主类，然后单击 "OK"（确定）。

image::images/run.png[]


[start=3]
. 在正运行的 Demo 应用程序中，从 "File"（文件）菜单中选择 "Open"（打开），以触发相应操作。该结果应该与此类似：

[.feature]
--
image::images/result_jfilechooserdemo-small.png[role="left", link="images/result_jfilechooserdemo.png"]
--


[start=4]
. 要关闭该应用程序，请在 "File"（文件）菜单中选择 "Exit"（退出）。

查看 GUI 组件面板中的其他有用 Swing 窗口和对话框，如 "ColorChooser"（颜色选择器）或 "OptionPane"（选项窗格）。

link:/about/contact_form.html?to=3&subject=Feedback:%20Adding%20a%20FileChooser[+发送有关此教程的反馈意见+]



== 后续步骤

* _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+实现 Java GUI+]
* link:gui-binding.html[+通过 NetBeans IDE 在 Java 应用程序中绑定 Bean 和数据+]
* link:gui-automatic-i18n.html[+用 NetBeans IDE 国际化 GUI 窗体+]
* link:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html[+Java 教程：如何使用文件选择器+]
