【Java学习】JFileChooser(文件选择器)的使用

一、概述。

javax.swing.JFileChooser()(文件选择器)提供了一种文件选择机制,一般用于打开文件,保存文件。

二、常用方法。

构造器:

1. public JFileChooser() : 构造一个JFileChooser对象,默认打开的文件夹为用户文件夹。

2. public JFileChooser(File currentDiretory) & public JFileChooser(String currentDiretory) : 创建一个打开文件夹currentDiretory的JFileChooser对象。 

3. public JFileChooser(FileSystemView fsv) : 创建一个基于fsv文件系统外观的JFileChooser对象。(参数说明:FileSystemView:文件系统外观,不设置则默认为当前文件系统的外观)

4. public JFileChooser(File currentDiretory, FileSystemView fsv) & public JFileChooser(String currentDiretory, FileSystemView fsv)  : 创建一个打开文件夹currentDiretory,基于fsv文件系统外观的JFileChooser对象。

【注】创建JFileChooser对象时无需指定parent组件,说明多个组件可以共用一个JFileChooser对象。

成员方法:

*各种参数设置

1.public void setCurrentDiretory(File dir) : 设置默认打开的文件夹。

2.public void setSelectedFile(File file) / public void setSelectedFiles(File[ ] selectedFiles) : 设置打开时默认选择的文件,可默认选择多个。

3.public void setSelectionMode(int mode) : 设置选择模式,默认情况为只可选文件,也可设置为只选文件夹,或可选文件及文件夹。(参数说明:可选参数为JFileChooser.FILES_ONLY / DIRETORY_ONLY / FILES_AND_DIRETORY)。

4.public void setMultiSelectionEnable(boolean b) : 默认只可选择一个目标,该方法设置参数为true可允许多选。

5.public void addChoosableFileFilter(FileFilter filter) : 在原有过滤器的基础上添加文件过滤器filter。

6.public void setFileFilter(FileFilter filter) : 设置文件过滤器filter,注意这将会清空之前的所有过滤器。

*调用选择对话框

1.public int showDialog(Component parent, String approveButtonText) / showOpenDialog(Component parent) / showSaveDialog(Component parent) : 弹出文件对话框,approveButtonText为“同意”按钮的文本,文件选择器常用于打开文件和保存文件,故提供了后两个方法,自动设置“同意”按钮的文本为“打开”和“保存”。返回一个int值,分别是 JFileChooser.APPROVE_OPTION,JFileChooser.CANCEL_OPTION和JFileChooser.ERROR_OPTION。在获取用户选择的文件之前,通常先验证返回值是否为APPROVE_OPTION.

*获取用户选择的文件

1.public File getSelectedFile() / pulbic File[ ] getSelectedFiles() : 返回用户选择的文件或文件集合。

三、使用说明。

    事实上,用文件选择器来进行文件及文件夹的选择操作十分简单,比如以下代码即能简单的选择文件。

     // 创建一个JFrame组件为parent组件
	JFrame frame = new JFrame();
    // 创建一个默认打开用户文件夹的问价选择器
	JFileChooser chooser = new JFileChooser();
	int flag = chooser.showOpenDialog(frame);
    //若选择了文件,则打印选择了什么文件
	if (flag == JFileChooser.APPROVE_OPTION) 
		System.out.println("用户选择了文件:" + chooser.getSelectedFile().getName());

       但是,在选择的时候,我们经常需要设置哪些类型的文件可见可选,比如,希望一个图片浏览器只能打开gif、jpg等图片类的文件,这时候就需要结合javax.swing.filechooser包下的抽象类FileFilter(文件过滤器)来使用。下面介绍一下FileFilter类的简单使用。

       继承FileFilter抽象类,需要重写两个抽象函数:

1.public abstract boolean accept(File file) : 判断文件是否可接受,只有可接受的文件才会在文件选择器显示。这是该抽象类的主要方法,实现了过滤功能。下面重写该方法,使该文件器只接受以mp4结尾的文件。

   public boolean accept(File file){
   //文件夹必须是可选(打开)的
   if(file.isDirectory())  return true;
   //以mp4结尾,设置为可选
   else if(file.getName().endsWith(".mp4")) return true;
   //其它的文件类型都设置为不可选
   return false;

2.public abstract void String getDescription() : 返回该文件过滤器的描述性内容。

四、项目实例--图片查看器。

import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.filechooser.FileFilter;

import java.awt.*;
import java.io.*;
import java.util.ArrayList;

public class JFileChooserTest {
	//设置预览大小
	final int PREVIEW_SIZE=100;
	JFrame frame=new JFrame("图片查看器");
	JMenuBar menuBar=new JMenuBar();
	//该label用于显示图片
	JLabel label=new JLabel();
	//在当前路径下创建文件选择器
	JFileChooser chooser=new JFileChooser(".");
	//该Label用于显示预览
	JLabel accessory=new JLabel();
	//定义文件过滤器
	ExtensionFileFilter filter=new ExtensionFileFilter();
	FileInputStream fileInput;
	FileOutputStream fileOutput;
	public void init() {
		//------------下面初始化JFileChooser的相关属性--------------------
		filter.addExtension("jpg");
		filter.addExtension("jpeg");
		filter.addExtension("gif");
		filter.addExtension("png");
		filter.setDescription("文件图片(*.jpg, *.jpeg, *.gif, *png)");
		chooser.addChoosableFileFilter(filter);
		//隐藏下拉列表中的“所有文件”选项
		chooser.setAcceptAllFileFilterUsed(false);
		//为文件选择器指定一个预览图片的附件
		chooser.setAccessory(accessory);
		//设置预览组件的大小和边框
		accessory.setPreferredSize(new Dimension(PREVIEW_SIZE,PREVIEW_SIZE));
		accessory.setBorder(BorderFactory.createEtchedBorder());
		//用于检测被选文件改变的事件
		chooser.addPropertyChangeListener(event->{
			if(event.getPropertyName()==JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) {
				//获取用户新选择的文件
				File f=(File)event.getNewValue();
				if(f==null) {
					accessory.setIcon(null);
					return;
				}
				//将被选文件读入ImageIcon对象中
				ImageIcon icon=new ImageIcon(f.getPath());
				//如果文件太大,则缩小它
				if(icon.getIconWidth()>PREVIEW_SIZE) {
					icon=new ImageIcon(icon.getImage().getScaledInstance(
							PREVIEW_SIZE, -1, Image.SCALE_DEFAULT));
				}
				//改变accessory的图标
				accessory.setIcon(icon);
			}
		});
	   //-----------下面开始为窗口安排菜单--------------
		JMenu menu=new JMenu("文件");
		menuBar.add(menu);
		JMenuItem openItem=new JMenuItem("打开");
		JMenuItem copyItem=new JMenuItem("保存副本为..");
		copyItem.setEnabled(false);
		menu.add(openItem);
		menu.add(copyItem);
		//单击“打开”弹出文件选择窗口
		openItem.addActionListener(event->{
			//显示文件对话框
			int result=chooser.showOpenDialog(frame);
			if(result==JFileChooser.APPROVE_OPTION) {
				String name=chooser.getSelectedFile().getPath();
				label.setIcon(new ImageIcon(name));
				try {
					fileInput=new FileInputStream(name);
				copyItem.setEnabled(true);
				} catch (FileNotFoundException e) {
					
					e.printStackTrace();
				}
			}
		});
		
		//实现图片的复制保存
		copyItem.addActionListener(event->{
			int result=chooser.showSaveDialog(frame);
			if(result==JFileChooser.APPROVE_OPTION) {
			String name=chooser.getSelectedFile().getName();
			File f=new File(name);
			try {
				fileOutput=new FileOutputStream(f);
				byte[] bytes=new byte[1024];
				int hasRead;
				while((hasRead=fileInput.read(bytes,0, 1024))!=-1) {
					fileOutput.write(bytes,0,hasRead);
				}
				fileOutput.close();
				fileInput.close();
			}catch(IOException ioe) {
				ioe.printStackTrace();
			}
			
					}
		});
		JMenuItem exitItem=new JMenuItem("Exit");
		menu.add(exitItem);
		exitItem.addActionListener(event->System.exit(0));
		label.setPreferredSize(new Dimension(500,500));
		frame.setJMenuBar(menuBar);
		frame.add(new JScrollPane(label));
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		new JFileChooserTest().init();
		
	}
	
	//创建FileFilter的子类,用于实现文件过滤功能
	class ExtensionFileFilter extends FileFilter{
		private String description;
		private ArrayList<String> extensions=new ArrayList<>();
		//自定义方法,用于添加文件后缀名
		public void addExtension(String extension) {
			if(!extension.startsWith("."))
				extension="."+extension;
			extensions.add(extension.toLowerCase());
		}
		//用于设置该文件过滤器的描述文本
		public void setDescription(String description) {
			this.description=description;
		}
		public String getDescription() {
			return description;
		}
		public boolean accept(File file) {
			if(file.isDirectory()) return true;
			String name=file.getName().toLowerCase();
			for(String extension:extensions) {
				if(name.endsWith(extension)) return true;
			}
			return false;
		}
	}
}

五、更多详细内容请参看API:https://docs.oacle.com/javase/8/docs/api/javax/swing/JFileChooser.html

### 回答1: jfilechooser.approve_option 是 Java Swing 中的一个类,它表示对话框中的“确认”按钮,通常用于用户选择完文件后点击确认按钮来执行相应的操作。该类提供了一个方法用于返回用户是否选择了“确认”按钮。在英文中,该方法的名称是 getApproveSelection()。 ### 回答2: 在Java中,JFileChooser是一个用户可以使用文件选择器组件。它允许用户浏览文件系统并选择特定文件或目录,可以用于打开、保存或选择文件JFileChooser.approve_option()是JFileChooser类的一个方法,它用于确定用户选择的选项。 在使用JFileChooser时,用户可以执行多种操作,如打开文件、保存文件、取消操作等等。在用户执行操作后,JFileChooser.approve_option()会根据用户的操作来确定选择的选项。如果用户选择了“打开”或“保存”选项,则该方法将返回JFileChooser.APPROVE_OPTION,表示用户已经确定了选择。如果用户选择了“取消”选项,则该方法将返回JFileChooser.CANCEL_OPTION,表示用户取消了选择。此外,如果发生错误,例如用户无权访问文件,则该方法可能返回JFileChooser.ERROR_OPTION,表示出现了错误。 例如,在使用JFileChooser时,可以使用approve_option()方法来确定用户是否已选择并打开文件。下面是一个示例代码: ``` JFileChooser chooser = new JFileChooser(); int result = chooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { // 用户打开了文件,可以进行相关操作 } else if (result == JFileChooser.CANCEL_OPTION) { // 用户取消了操作,不需要进行任何操作 } else if (result == JFileChooser.ERROR_OPTION) { // 出现了错误,需要进行相应的处理 } ``` 在这个例子中,JFileChooser.showOpenDialog方法用于显示“打开文件”对话框,用户可以在该对话框中选择打开哪个文件。approve_option()方法被用来确定用户是否已经选择并打开文件。如果用户打开了文件,则可以在if语句中进行相应的操作;如果用户取消了操作,则可以在else if语句中进行相应的操作;如果出现了错误,则可以在最后的else if语句中进行相应的处理。 总之,JFileChooser.approve_option()是JFileChooser类的一个重要方法,它可以确定用户选择的选项,帮助程序员编写更加健壮的代码。在使用JFileChooser时,程序员应该熟悉这个方法的使用,以便更好的处理用户输入。 ### 回答3: JFileChooser.approveOption是Java Swing中的一个方法,它是JFileChooser类的一个成员方法,用于设置文件选择器的确定选项按钮的文本。一般来说,文件选择器是用于让用户选择文件或目录的界面元素。而确定选项按钮则是其中的一个重要的交互元素,用于让用户确认选择的文件或目录。 当用户在文件选择器中选择了一个文件或目录后,就可以通过单击确定选项按钮来确认选择。而JFileChooser.approveOption方法的作用就是设置确定选项按钮的文本。例如,我们可以这样使用这个方法来设置确定选项按钮的文本: JFileChooser fc = new JFileChooser(); fc.setApproveButtonText("OK"); 这样,文件选择器中的确定选项按钮就可以显示为“OK”文本了。除了设置文本,JFileChooser.approveOption方法还可以用来设置确定选项按钮的显示图标和提示文本等属性。例如: fc.setApproveButtonIcon(icon); fc.setApproveButtonToolTipText("Click here to save the file"); 这样,我们就可以将确定选项按钮的图标设置为一个图片,同时还可以为其添加一个提示文本。 总之,JFileChooser.approveOption是一个用于设置文件选择器的确定选项按钮的方法,它可以让我们灵活地定制文件选择器的外观和交互。如果你需要使用文件选择器来让用户选择文件或目录,那么这个方法就是你必须要掌握的一个技能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值