// 
//     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"]
--



. 单击 "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"]
--



. 单击 "Finish"（完成）。


. 在 "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"]
--



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


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

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

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



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


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


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

image::images/openactionperformednavigator.png[]



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

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



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


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


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


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

[source,java]
----

			 System.exit(0); 
----


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

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



. 调整已添加组件的大小，以便为文件选择器稍后显示的文本留出空间。将变量重命名为 `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``  的预览非常大，并且可能会不小心将窗口插入到错误的面板。



. 查看导航器，确认  ``JFileChooser``  已添加到窗体中。


. 右键单击  ``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.");
    }
} 
----

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



. 如果编辑器报告了代码中有错误，则右键单击代码中的任意位置，然后选择 "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"]
--



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


. 要使定制代码正常工作，需要编写内部（或外部） ``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[]



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

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



. 要关闭该应用程序，请在 "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 教程：如何使用文件选择器+]
