JFILECHOOSER基本使用方法

  • 格式:pdf
  • 大小:188.85 KB
  • 文档页数:9

把上面这段代码添加进刚才的类里面,然后把 JFileChooser file = new JFileChooser (".");改成 JFileChooser file = new MyChooser ("."); 好了,现在我们就可以在不关闭该对话框的情况下判断用户的输入是否错误了。还可以加入 正则表达式,判断用户输入是否符合规定,操作方式按照这个框架来写就没问题了。这里不 再赘述。下面是保存对话框! 保存对话框: 其实保存对话框和打开文件对话框在使用上没什么区别,他们都是使用同一个类 JFileChooser,因为在 swing 当中打开和保存对话框不会做出任何对文件进行处理的功能, 所有的这些功能需要我们自己去实现,而仅仅是提供了 1 个这样的窗口模型而已。因此这 两种窗口其实只是将按钮的标签进行了替换而已。创建他们唯一的区别就是打开是调用 showOpenDialog()方法,保存则是调用 showSaveDialog(),创建形式几乎一样。我们在使 用他们的时候就需要分别对这两种窗口的返回后进行不同的处理,设置过滤器是一样的,因 此过滤器我们就复用上面打开文件窗口的方法,但是在判断输入保存文件是否在当前目录下 时,我们需要做出不一样的处理。当用户输入了与当前目录相同的文件名后,要弹出对话框 询问用户是否需要覆盖原文件,如果用户选择否,那么返回保存文件的对话框允许用户继续 选择或者输入保存的文件名。 下面我只需要修改上面代码的两个地方就能够达到目的。首先将修改一下 MyChooser 这个 类 private static class MyChooser extends JFileChooser { MyChooser(String path) {
getSelectedFiles() 如果将文件选择器设置为允许选择多个文件,则返回选中文件的列表(File[])。
getSelectedFile() 返回选中的文件。
package com.liang;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File;
if(result == JFileChooser.APPROVE_OPTION) { /*获得你选择的文件绝对路径。并输出。当然,我们获得这个路径后还可以做很多的事。
String path = file.getSelectedFile().getAbsolutePath(); System.out.println(path); } else { System.out.println("你已取消并关闭了窗口!"); } } /*因为我们需要创建一个文件的过滤器,以便让文件对话框显示我们指定的文件。这里我们 就以 Excel 文件和 exe 文件举例。 那么要做到这点我们就需要重写 FileFilter 类的 accept 来设置相关的过滤器。这个继承类你 可以写成外部类、内部类甚至是 匿名内部类。我这里写成了一个内部类的形式。因为是在 main 方法使用他,因此这个类也 要定义成 静态的。
return true; } return false; } /*这个方法也是重写 FileFilter 的方法,作用是在过滤名那里显示出相关的信息。这个与我们 过滤的文件类型想匹配,通过这些信息,可以让用户更清晰的明白需要过滤什么类型的文件。
*/ public String getDescription() {
showOpenDialog(Component parent) 弹出一个 "Open File" 文件选择器对话框。
showSaveDialog(Component parent) 弹出一个 "Save File" 文件选择器对话框。
setMultiSelectionEnabled(boolean b) 设置文件选择器,以允许选择多个文件。
this.ext = ext; } /*这个方法就是重写 FileFilter 类的方法,参数是 File 对象,一般这个参数是如何传入的我 们可以不用关心。他返回一个布尔型。如果为真表示该文件符合过滤设置,那么就会显示在 当前目录下,如果为假就会被过滤掉。
public boolean accept(File file) { //首先判断该目录下的某个文件是否是目录,如果是目录则返回 true,即可以显示在目录下。
private static class ExcelFileFilter extends FileFilter {
String ext; //构造方法的参数是我们需要过滤的文件类型。比如 excel 文件就是 xls,exe 文件是 exe. ExcelFileFilter(String ext) {
public static void main(String [] args) { //首先是创建 JFileChooser 对象,里面带个参数,表示默认打开的目录,这里是默认打开 当前文件所在的目录。
JFileChooser file = new JFileChooser ("."); //下面这句是去掉显示所有文件这个过滤器。 file.setAcceptAllFileFilterUsed(false); //添加 excel 文件的过滤器 file.addChoosableFileFilter(new ExcelFileFilter("xls")); //添加 exe 文件的过滤器 file.addChoosableFileFilter(new ExcelFileFilter("exe")); /*使用 showOpenDialog()方法,显示出打开选择文件的窗口,当选择了某个文件后,或者 关闭此窗口那么都会返回一个 整型数值,如果返回的是 0,代表已经选择了某个文件。如果返回 1 代表选择了取消按钮或 者直接关闭了窗口*/ int result = file.showOpenDialog(null); /*JFileChooser.APPROVE_OPTION 是个整型常量,代表 0。就是说当返回 0 的值我们才 执行相关操作,否则什么也不做。
if (file.isDirectory()) { return true; } //获得某个文件的文件名,然后使用 lastIndexOf()来获得这个文件名字符串中'.'这个字符最 后一次出现的位置。并且通过它返回的一个整型来判断该文件是否符合*.*这中文件+文件名 的格式,如果不符合那么就不显示这个文件。如果符合,那么就将'.'字符后面的字符串提取 出来与过滤的文件名相比较,如果相等则符合该文件格式,并显示出来。如果不相等那么就 将其过滤掉。*/ String fileName = file.getName(); int index = stIndexOf('.'); if (index > 0 && index < fileName.length() - 1) { String extension = fileName.substring(index + 1).toLowerCase(); if (extension.equals(ext))
JFileChooser() 构造一个
分类: Java 学习笔记
JFileChooser(File currentDirectory) 使用给定的 File 作为路径来构造一个 JFileChooser。
setFileSelectionMode(int mode) 设置 JFileChooser,以允许用户只选择文件、只选择目录,或者可选择文
import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel;
public class FileChooser extends JFrame implements ActionListener{ JButton open=null; public static void main(String[] args) { new FileChooser(); } public FileChooser(){ open=new JButton("open"); this.add(open); this.setBounds(400, 200, 100, 100); this.setVisible(true);
}
} JFileChooser 效果图如下:
其实 JFileChooser 基本使用方法还是很简单的,下面写两个示例看了就明白了,如果还要 增加一些功能,我们还可以添加过滤器,只显示过滤后的文件。还可以再保存的时候,如果 保存的是目录里已经存在的文件,那么对话框不会关闭,并且弹出一个 JOptionPane 提示 用户是否保存文件。 打开文件对话框: import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; public class FileChooserTest {
if (ext.equals("xls")) {
return "Microsoft Excel 文件(*.xls)"; } if(ext.equals("exe")) { return "可执行文件(*.exe)"; } return ""; } } } 打开选择文件的对话框就建立好了。但是上面的程序还有瑕疵。因为只有当用户点取消或关 闭该窗口时才不会执行任何操作。而如果用户在对话框里输入的文件在当前目录中不存在时, 那么窗口依然会关闭,这时可能就需要在程序中再来做判断。那么可不可以在当用户输入错 误的文件名后,窗口不会关闭,而是不执行任何操作或者弹出个对话框提示用户,可以看看 大多数 window 程序中的选择对话框都是这么做的,其实要实现这个功能也不难,只需要再 重写一下 JFileChooser 类的 approveSelection()方法就行了。 我们将上面的程序做下修改,首先还是需要创建一个继承于 JFileChooser 的类,这个类可 以写成外部或者内部类,我们这里依然写为内部类,注意,如果需要在静态方法中调用它, 则需要将它设置为静态的。 private static class MyChooser extends JFileChooser { MyChooser(String path) { super(path); } /** * 重载 JFileChooser 的方法,当在文件选择对话框中,并在当前 * 目录下没有找到输入的文件,则对话框不会关闭。直到选择的文件 在当前选择的目录 下,才关闭对话框,并执行后面的操作。 */ public void approveSelection() { File file = new File(getSelectedFile().getPath()); if (file.exists()) super.approveSelection(); else JOptionPane.showMessageDialog(null, "你选择的文件不存在,请重新选择!"); }