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文件的保存和打开
智能推荐
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基础语法 本笔记是对这本书的基础语法部分进行了学习: 因为本身有其他语言的编程基础,所以笔记仅仅对我自不熟悉的部分进行了记录 函数...
猜你喜欢
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文件...
