向 Java 应用程序添加文件选择器

撰稿人:Petr Dvorak(2009 年 12 月),维护人:Alyona Stashkova

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

可以使用文件选择器下载生成的项目

目录

此页上的内容适用于 NetBeans IDE 7.0 及更高版本

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

软件或资源 要求的版本
NetBeans IDE 版本 7.0 或更高版本
Java 开发工具包 (JDK) 版本 6、7 或 8

创建应用程序

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

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

    新建项目向导

  4. 单击 "Finish"(完成)。

创建应用程序窗体

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

要创建 JFrame 窗体,请执行以下操作:

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

    正在创建的新 JFrame 容器

  4. 单击 "Finish"(完成)。
  5. 在 "Properties"(属性)窗口中,输入 Demo application 作为 "Title"(标题)属性,然后按 Enter 键进行确认。

将组件添加到 JFrame 窗体中:

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

    注:如果未显示 "Palette"(组件面板),请从主菜单中选择 "Window"(窗口)> "Palette"(组件面板)。

    添加到 JFrame 窗体中的菜单栏

  2. 右键单击 "Menu Bar"(菜单栏)组件的 "Edit"(编辑)项,然后在上下文菜单中选择 "Delete"(删除)。
  3. 要添加菜单项,以便从正在运行的应用程序打开文件选择器,请在 "Palette"(组件面板)的 "Swing Menus"(Swing 菜单)类别中,选择新的菜单项 (JMenuItem1),然后将其拖放至 "Menu Bar"(菜单栏)的 "File"(文件)项。

    添加到菜单栏中的菜单项

    注:请确保先选择 "Menu Bar"(菜单栏),然后再将其他菜单项拖至此处,以便将后者添加到 "Menu Bar"(菜单栏)中。

  4. 在 "Design"(设计)视图中右键单击 jMenuItem1,然后从上下文菜单中选择 "Change Variable Name"(更改变量名称)。将项重命名为 Open,然后单击 "OK"(确定)。
  5. 确保 jMenuItem1 在 "Design"(设计)视图中仍处于选中状态。按空格键编缉组件的文本。将文本更改为 Open,然后按 Enter 键进行确认。
  6. 为 "Open" 菜单项指定操作处理程序。右键单击菜单项,然后从上下文菜单中选择 "Events"(事件)> "Action"(操作)> "action Performed"(执行的操作)。GUI 构建器自动切换至 "Source"(源)视图,并构建名为 OpenActionPerformed() 的新事件处理程序方法。"Navigator"(导航器)窗口应如下所示:

    添加到菜单栏中的菜单项

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

    突出显示

  8. 在 "Design"(设计)视图中右键单击 jMenuItem1,然后从上下文菜单中选择 "Change Variable Name"(更改变量名称)。将项重命名为 Exit,然后单击 "OK"(确定)。
  9. 确保 jMenuItem1 在 "Design"(设计)视图中仍处于选中状态。按空格键编缉组件的文本。将文本更改为 Exit,然后按 Enter 键进行确认。
  10. 为 "Exit" 菜单项指定操作处理程序。右键单击菜单项,然后从上下文菜单中选择 "Events"(事件)> "Action"(操作)> "action Performed"(执行的操作)。GUI 构建器自动切换至 "Source"(源)视图,并将构建名为 ExitActionPerformed() 的新事件处理程序方法。ExitActionPerformed 节点显示在 "Navigator"(导航器)窗口中 OpenActionPerformed() 节点的下方。
  11. 要使 "Exit" 菜单项正常工作,需要将以下源添加到 ExitActionPerformed() 方法的主体中:
    			 System.exit(0); 
  12. 切换回 "Design"(设计)模式。从 "Palette"(组件面板)的 "Swing Controls"(Swing 控件)类别中,将文本区域 (JTextArea) 拖入窗体中,如下图所示。

    添加到 JForm 中的文本区域

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

    Java 应用程序 - GUI 构建器

您已设置了一个简单的 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 的预览非常大,并且可能会不小心将窗口插入到错误的面板。

  3. 查看导航器,确认 JFileChooser 已添加到窗体中。
  4. 右键单击 JFileChooser 节点,并将变量重命名为 fileChooser

    已添加文件选择器 - 导航器视图

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

配置文件选择器

实现 "Open" 操作

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

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

  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"(定制代码)。

    组合框打开

  4. 在文本字段中键入 new MyCustomFilter()。单击 "OK"(确定)。
  5. 要使定制代码正常工作,需要编写内部(或外部)MyCustomFilter 类,以扩展 FileFilter 类。复制以下代码片段,并将其粘贴到类的源代码中 import 语句的下方,以创建实现过滤器的内部类。
        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)";
            }
        } 

注:要了解如何实现更智能的、可切换的文件过滤器,请参见 addChoosableFileFilter 方法。

运行应用程序

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

    运行

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

    JFileChooser 演示 - 结果

  4. 要关闭该应用程序,请在 "File"(文件)菜单中选择 "Exit"(退出)。

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


后续步骤

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo