JAVA JFileChooser实现文件选择和保存对话框

问题描述:

       利用 Java poi生成excel表格,可以将其保存到计算机本地磁盘,实现路径可自由选择

问题分析:

        在原来的设计中,将生成的excel表格保存到计算机本地制定的路径,可参考Java poi 通过Java程序控制excel表格中实现将数据保存到计算机本地磁盘中,不过路径是指定的,不过问题是:如何实现路径的可以自由选择呢?我们在保存文件的时候,点击保存按钮会弹出本地文件路径选择框,可以选择路径,那么,如何将程序中生成的excel表格在本地计算机的保存中实现路径的自由选择。JfileChooser类可以调用本地计算机文本选择对话框,实现文本的选择或存储。


 (一)JFileChooser方法说

        1.JFileChooser的构造方法有三种,参数设置不同代表的功能也不同。

(1)默认构造函数:JFileChooser();

(2)参数为currentDirectory:JFileChooser(currentDirectory),参数表示的意思是打开文件选取器时默认显示的文件夹                      (默认为用户文件夹)

(3)参数为currentDirectoryPath:JFileChooser(currentDirectoryPath),参数表示的意思是打开文件选取器时默认显                        示的文件夹(默认为用户文件夹)

       2.void setCurrentDirectory(File file)

            该方法主要用于设置打开导航框时显示的文件夹。

     3.void setFileSelectionMode(int mode)

   该方法用于设置文件的打开模式,一般有以下三种文件打开模式:

     (1)JFileChooser.FILES_ONLY: 只能选文件; 

      (2) JFileChooser.DIRECTORIES_ONLY: 只能选文件夹;

      (3)JFileChooser.FILES_AND_DIRECTORIES: 文件和文件夹都可以选。

4.void setMultiSelectionEnabled(boolean b)

          该方法用于设置是否可以同时选取多个文件,默认值是false。

5.void addChoosableFileFilter(FileFilter filter)

         该方法是用于设置文件过滤选择器,也就是允许你选择的文件类型。

6.void setFileFilter(FileFilter filter)

         该方法用于设置默认的文件过滤器。

7.void setSelectedFile(File file) ,void setSelectedFiles(File[] selectedFiles)

       两者均用于设置被选中的文件,单个或多组文件。

8.int showOpenDialog(Component parent)

       该方法用于显示我们选择文件时弹出的框,亦即文件导航窗。

9.int showSaveDialog(Component parent)

        顾名思义该方法是保存文件的弹出框。

此处两个parent表示的意思是:文件选取器对话框的父组件, 对话框将会尽量显示在靠近 parent 的中心; 如果为 null, 则显示在屏幕中心。

同时呢这两个方法的返回值也代表着特定的意思:

(1)JFileChooser.CANCEL_OPTION: 点击了取消或关闭 ;

(2) JFileChooser.APPROVE_OPTION: 点击了确认或保存 ;

(3)JFileChooser.ERROR_OPTION: 出现错误。

常常用于判断文件是否要打开或者保存。

10.File getSelectedFile() ,File[] getSelectedFiles()

         该方法用于获取打开或保存的文件。
 

使用JFileChooser即可实现计算机本地文件的打开,保存。


问题解决:

   

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;

public class TestOpen extends JFrame {
	private JPanel contentPane;	//声明一个 JFileChooser 对象	
	private JFileChooser chooser;	
	 File fi;

	public static void main(String[] args) {		
		EventQueue.invokeLater(new Runnable() {			
			public void run() {				
				try {					
					TestOpen frame = new TestOpen();				
					frame.setVisible(true);					
				} catch (Exception e) {					
					e.printStackTrace();					
				}				
			}			
		});		
	}
	
	public TestOpen() {
		try {			
			UIManager.setLookAndFeel(new WindowsLookAndFeel());   //	将窗体JFrame的 LookAndFeel 设定为 Windows		
		} catch (UnsupportedLookAndFeelException e1) {			
			e1.printStackTrace();			
		}
		
      //将 chooser 实例化		
		chooser=new JFileChooser();

		FileNameExtensionFilter filter = new FileNameExtensionFilter(
		        "EXCEL文件(*xls)", "xls");
	   	chooser.setFileFilter(filter);//增加文件过滤器
		String defaultFileName="侬好呀"+" .xls";;
		chooser.setSelectedFile(new File(defaultFileName)); //设置默认文件名
		
		
		//定义窗体
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		setBounds(100, 100, 450, 300);		
		contentPane = new JPanel();		
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));		
		setContentPane(contentPane);		
		contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
				
		JButton btnOpenFile = new JButton("保存文件");		
		btnOpenFile.setFocusable(false);		
		btnOpenFile.addMouseListener(new MouseAdapter() {			
			@Override		
			public void mouseClicked(MouseEvent e) {
				
				/**
				 * 弹出一个打开文件的对话框 showOpenDialog()
				 * 需要指定一个父级窗体,或指定为 null
				 * 返回值是 int 类型,创建以接收返回值
				 */
		
				int value=chooser.showSaveDialog(TestOpen.this);			
				chooser.setDialogTitle("保存文件");				 
				chooser.setMultiSelectionEnabled(true);
				

				if (value==chooser.APPROVE_OPTION) {
				/*
				 * 创建一个文件对象,接收返回值	getSelectedFile()只能返回选中文件中的第一个文件,
				 *  File file=chooser.getSelectedFile()	
				 * System.out.println(file.getAbsolutePath());getSelectedFiles() 返回所有选中的文件0	
				 */
          			//显示保存的路径
					File filex[]=chooser.getSelectedFiles();					
					for (int i = 0; i < filex.length; i++) {						
						System.out.println(filex[i].getAbsolutePath());
						   fi = chooser.getSelectedFile();
					        String f = fi.getAbsolutePath()+" .xls";
					        System.out.println("save: "+f);
					}					
				}				
		    }			
		});
		
		contentPane.add(btnOpenFile);
	
		JButton btnOpenDir = new JButton("打开文件");		
		btnOpenDir.setFocusable(false);		
		btnOpenDir.addMouseListener(new MouseAdapter() {		
			@Override		
			public void mouseClicked(MouseEvent e) {
				
               //设定当前可选择的文件类型,设定为 DIRECTORIES_ONLY,即只能选择文件如果没有设定,
				//默认为 FILES_ONLY,即只能选择文件				
				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);								
                  //将chooser 设定为可多选,如果没有设定,默认为 false,即只能单选				
				chooser.setMultiSelectionEnabled(true);								
				int value=chooser.showOpenDialog(TestOpen.this);								
				if (value==chooser.APPROVE_OPTION) {
					// 创建一个文件对象,接收返回值
					// getSelectedFile()只能返回选中文件夹中的第一个文件夹
					// File dir=chooser.getSelectedFile();
					// System.out.println(dir.getAbsolutePath());
					//getSelectedFiles() 返回所有选中的文件夹
					
					File dirx[]=chooser.getSelectedFiles();
					
					for (int i = 0; i < dirx.length; i++) {
						
						System.out.println(dirx[i].getAbsolutePath());
						
					}
					
				}
				
			}
			
		});
		
		contentPane.add(btnOpenDir);		
	}	
}

运行结果如下:

 

点击保存按钮:

       注:可以在文件名中添加自定义的文件名

点击打开按钮:

可以参考上面的代码,定义文件选择器,并实现将excel文件的保存和打开

 

 

 

 

 

 

 

 

 

 

版权声明:本文为weixin_41792162原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41792162/article/details/89598040

智能推荐

Java Plug-in 对话框

首先申明下,本文为笔者学习《Eclipse插件开发学习笔记》的笔记,并加入笔者自己的理解和归纳总结。 1. 标准消息对话框 MessageBox可以方便地生成标准消息对话框。 setText()方法设置MessageBox的标题,setMessage()方法设置显示消息。 MessageBox的图标样式, SWT.ICON_ERROR,显示错误消息。 SWT.ICON_WARNING,显示警告消息...

java GUI对话框的使用

对话框概述 swing中的JOptionPane类提供了创建对话框的方法 创建方法支持重载,说明如下 对话框的返回值 showConfirmDialog的返回值有如下几个: 程序实例 结果截图如下: 消息对话框截图: 确认对话框截图 输入对话框 选项对话框...

文件对话框CFileDialog类:打开和保存

1.新建一个基于对话框的MFC工程 2.添加一个“Bottom”和“Edit Control”, 修改对应的ID为IDC_OPEN_BOTTOM,iDC_OPEN_EDIT。 3.双击Bottom”打开“,编辑对应的消息处理函数 CFileDialog类 参数说明: bOpenFileDialog:指定要创建的文件对话框的类型...

python基础(《Python编程从入门到实践》笔记)K

python基础语法 本笔记是对这本书的基础语法部分进行了学习: 因为本身有其他语言的编程基础,所以笔记仅仅对我自不熟悉的部分进行了记录 函数...

猜你喜欢

VUE脚手架html2canvas生成图片

长按识别二维码 下载插件 页面引入...

小程序login登录前后端实现

小程序login登录前后端实现 获取临时code 请求的接口 使用koa2 fly.js 登录验证 发送code...

QT(C++)面试总结

参考博客 QT信号槽机制的优缺点 (1)问题: 为什么Qt使用信号与槽机制而不是传统的回调函数机制进行对象间的通信呢? 回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。 回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做...

【数据结构】栈与队列的面试题(一)

栈的简单认识和基本操作:点击打开链接 队列的简单认识和基本操作:点击打开链接 一.实现一个栈,要求实现Push(出栈),Pop(出栈),Min(返回最小值)的时间复杂度为O(1)。      (1.)方法一:创建两个栈来实现(Stack1,Stack2)                 &...

Pytorch设置random.seed()随机种子

转载自:https://blog.csdn.net/qq_16234613/article/details/81356876,本文只做个人记录学习使用,版权归原作者所有。 测试: 可以看到random.seed()对于import的文件同样有用。而且当你设置一个随机种子时,接下来的随机算法生成数可按照当前的随机种子按照一定规律生成。也就是一个随机种子就能重现随机生成的序列。 当随机种子设置在b文件...