除了常规的提示对话框,还有一种对话框也很常见,它叫做文件对话框。文件对话框又分为两小类:打开文件的对话框、保存文件的对话框,但在Swing中它们都用类型JFileChooser来表达。下面是JFileChooser的常用方法说明:

setDialogTitle:设置文件对话框的标题。

setApproveButtonText:设置确定按钮的文本。

setCurrentDirectory:设置文件对话框的初始目录。

setMultiSelectionEnabled:设置是否支持选择多个文件。取值true表示支持多选,false表示不支持多选,默认不允许多选。

setFileSelectionMode:设置文件的选择模式。选择模式有三种:JFileChooser.FILES_ONLY(只显示文件,不过实际测试发现也会显示目录),JFileChooser.DIRECTORIES_ONLY(只显示目录),JFileChooser.FILES_AND_DIRECTORIES(显示文件与目录)。

setFileFilter:设置文件挑选的过滤器。

setDialogType:设置对话框的类型。取值JFileChooser.OPEN_DIALOG代表这是文件打开对话框,JFileChooser.SAVE_DIALOGG代表这是文件保存对话框。

showOpenDialog:显示文件打开对话框。该方法的返回值体现了文件选择与否,为JFileChooser.APPROVE_OPTION时表示在对话框上按下了确定按钮,为JFileChooser.CANCEL_OPTION时表示在对话框上按下了取消按钮。

showSaveDialog:显示文件保存对话框。该方法的返回值说明同showOpenDialog。

getSelectedFile:获取当前选中的文件对象。

getSelectedFiles:仅在多选情况下,获取当前选中的文件对象数组。

上述方法当中,尤为需要注意的是setFileFilter,乍看起来该方法的输入参数为FileFilter类型,但它并非java.io下面的文件过滤器,而是Swing自带的文件对话框过滤器。这个过滤器与IO库的同名过滤器相比,一样拥有accept方法判断当前文件是否满足过滤条件;不同之处在于,文件对话框的过滤器多了个getDescription方法,该方法的返回字符串要显示在对话框内部的文件类型下拉列表中,相当于给文件类型做个补充说明。例如,txt类型俗称文本文件,jpg、gif、png几个类型合称图片文件,ppt、pptx类型称作幻灯片文件等等。具体的文件过滤器调用代码示例如下:

JFileChooser chooser = new JFileChooser(); // 创建一个文件对话框

chooser.setCurrentDirectory(new File("E:/")); // 设置文件对话框的当前目录

chooser.setFileFilter(new FileFilter() { // 设置文件对话框的文件过滤器

@Override

public boolean accept(File file) { // 判断当前文件是否满足过滤条件,只有满足条件的才会显示在对话框中

// 目录满足条件,扩展名为txt的文件也满足条件

return file.isDirectory() || file.getName().toLowerCase().endsWith(".txt");

}

@Override

public String getDescription() { // 获取过滤器的描述

return "*.txt(文本文件)";

}

});

接下来演示看看如何操作文件对话框,先给一个按钮注册单击监听器,在单击按钮时调用showOpenDialog方法弹出文件对话框。以文件打开对话框为例,具体的调用代码如下所示:

btnOpenFile.addActionListener(new ActionListener() { // 给按钮注册一个点击监听器

@Override

public void actionPerformed(ActionEvent e) { // 发生了单击事件

// 设置文件对话框的类型,这里的对话框准备打开文件

chooser.setDialogType(JFileChooser.OPEN_DIALOG);

// 显示文件打开的对话框

int result = chooser.showOpenDialog(frame);

if (result == JFileChooser.APPROVE_OPTION) { // 单击了确定按钮

// 获取在文件对话框中选择的文件

File file = chooser.getSelectedFile();

label.setText("准备打开的文件路径为:" + file.getAbsolutePath() + "");

} else { // 未单击确定按钮

label.setText("取消打开文件");

}

}

});

运行测试程序,单击按钮弹出的文件打开对话框如下图所示。

双击进入文件对话框里面的下级目录,找到某个文本文件并单击它,文件对话框的“文件名”一栏显示该文件的名称,表示已经选中这个文件,此时对话框界面如下图所示。

然后单击对话框下方的“打开”按钮,回到如下图所示的程序主界面,可见主界面成功获知刚才选中文件的完整路径。

同样给另一个按钮注册单击监听器,在单击按钮时调用showSaveDialog方法弹出文件保存对话框,此时的调用代码如下所示:

btnSaveFile.addActionListener(new ActionListener() { // 给按钮注册一个点击监听器

@Override

public void actionPerformed(ActionEvent e) { // 发生了单击事件

// 设置文件对话框的类型,这里的对话框准备保存文件

chooser.setDialogType(JFileChooser.SAVE_DIALOG);

// 显示文件保存的对话框

int result = chooser.showSaveDialog(frame);

if (result == JFileChooser.APPROVE_OPTION) { // 单击了确定按钮

// 获取在文件对话框中选择的文件

File file = chooser.getSelectedFile();

label.setText("准备保存的文件路径为:" + file.getAbsolutePath() + "");

} else { // 未单击确定按钮

label.setText("取消保存文件");

}

}

});

运行测试程序,单击按钮弹出的文件保存对话框如下图所示。

与文件打开对话框相比,文件保存对话框的左上角标题由“打开”改为“保存”,下方的“打开”按钮改为“保存”按钮,除了这两个地方有变化,其它都一模一样。在对话框的“文件名”一栏填写待保存的文件名,然后单击“保存”按钮,回到如下图所示的程序主界面,可见主界面成功获知那个待保存文件的完整路径。

文件对话框的内部字体也不能通过setFont方法直接修改,原因很简单,对话框只是一个框架,框架内部又有许多控件,故而需要遍历这些内部控件,再一一设置每个控件的文本字体。详细的对话框字体设置方法定义如下:

// 设置对话框的内部字体。第一个参数需要传入文件对话框的实例

private static void setComponentFont(Component component, Font font) {

component.setFont(font); // 设置当前组件的字体

if (component instanceof Container) { // 如果该组件是容器

Container container = (Container) component; // 把该组件强制转为容器

int count = container.getComponentCount(); // 获取容器内部的组件数量

for (int i = 0; i < count; i++) { // 遍历该容器的所有组件

// 给每个组件再设置一遍内部字体

setComponentFont(container.getComponent(i), font);

}

}

}

java swing对话框_Java开发笔记(一百三十五)Swing的文件对话框相关推荐

  1. Android开发笔记(三十五)页面布局视图

    布局视图的类别 布局视图有五类,分别是线性布局LinearLayout.相对布局RelativeLayout.框架布局FrameLayout.绝对布局AbsoluteLayout.表格布局TableL ...

  2. Android开发笔记(三十四)Excel文件的读写

    Android中操作Excel文件的场合较少见,主要是一些专业领域导入导出报表时使用,所以处理Excel读写的开源代码也很稀缺.目前读写Excel主要采用开源库jxl,这个是韩国人写的excel操作工 ...

  3. JAVA翻译官_Java开发笔记(三)Java帝国的特种官吏

    上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了.比如说"// 参观朱雀台"为何能够直接跟在当前行后面?&q ...

  4. java把字符转化为整型_Java开发笔记(三十二)字符型与整型相互转化

    前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...

  5. java 流式_Java开发笔记(七十二)Java8新增的流式处理

    通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方 ...

  6. java 日历工具_Java开发笔记(四十二)日历工具的常见应用

    前面介绍了日历工具Calendar的基本用法,乍看起来Calendar与Date两个半斤八两,似乎没有多大区别,那又何苦庸人自扰鼓捣一个新玩意呢?显然这样小瞧了Calendar,其实它的作用大着呢,接 ...

  7. Android开发笔记(七十五)内存泄漏的处理

    内存泄漏的原因 一直以来以为只有C/C++才存在内存泄漏的问题,没想到拥有内存回收机制的Java也可能出现内存泄漏.C/C++存在指针的概念,程序中需要使用指针变量时,就从内存中开辟一块区域,并把该区 ...

  8. Android开发笔记(七十四)布局文件优化

    include/merge 布局优化中常常用到include/merge标签,include的含义类似C代码中的include,意思是直接把指定布局片段包含进当前的布局文件.include适用于多个布 ...

  9. Slicer学习笔记(三十五)slicer学习链接

    Slicer学习笔记(三十五)slicer学习链接 使用方面: 坐标系:https://www.slicer.org/wiki/Coordinate_systems 模块:https://slicer ...

最新文章

  1. SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务)
  2. git的一些常用操作
  3. Intel Hex格式说明
  4. Java NIO系列教程(五) 通道之间的数据传输
  5. 自制仿360首页支持拼音输入全模糊搜索和自动换肤
  6. Ubuntu配置IPFS的环境
  7. 论文浅尝 | SPARQL 语言的 ASK 查询表达性研究进展
  8. 用深度强化学习玩atari游戏_被追捧为“圣杯”的深度强化学习已走进死胡同
  9. php中时间戳和正常日期的相互转化
  10. python3安装及加载gensim
  11. Ansys Lumerical Zemax Speos | CMOS 传感器相机:3D 场景中的图像质量分析
  12. XWPFTemplate生成根据模板文件填充内容生成word文件
  13. centos 7之firewalld防火墙配置IP伪装和端口转发案例详解
  14. C#医院门诊会员管理系统源码 通用会员系统源码
  15. vue实现pc端扫码登录
  16. Python-编写Python脚本进行iOS代码混淆(iOS防黑加固之代码混淆篇)
  17. 高桥盾react和boost_耐克的Epic React和阿迪的Boost哪个更厉害
  18. 【综述】Transformers in Remote Sensing: A Survey
  19. slither——区块链智能合约静态分析工具
  20. 【Docker】Docker概述

热门文章

  1. C++ 设计模式 —— 控制器设计模式(实现功能模块间通信)
  2. leetcode(226)—— Invert Binary Tree(Python/C++)
  3. 机器学习基础(四十八)—— 概率
  4. Java web 基础
  5. swool tcp mysql_Swoole WebSocket 实现mysql实时数据展示
  6. 导盲机器人 英语作文_小米有品推学习平板:小爱AI陪娃学英语,一台陪娃十年成长...
  7. 哪种css实现方式优势更突出_css和div的优势有哪些?
  8. 七月在线python数据分析_七月在线Python数据分析笔记
  9. 自学python能干些什么副业-学会python能干嘛 学会python可以做哪些兼职?
  10. python编程语言-为什么Java、Python会成为程序员最害怕的编程语言?