8.6.2 JFileChooser 文件对话框 JFileChooser表示文件对话框,常用来弹出“打开”、“保存”后其他自定标题的文件对话框,并可爱对话框中进行文件选择。1 R+ g0 R k- {! l
JFileChooser类提供了6个构造方法用于创建JFileChooser类对象,常用的有3个,详见下表。* K8 W+ ?+ r- g- z
表8-16 JFileChooser常用构造方法
4 f6 l3 M4 X: o6 U' q$ B Q 构造方法1 ?9 D2 l) y$ L+ r$ J
说明
5 S. `( H( ]. | JFileChooser()
3 w7 s+ i$ @: g& y/ Q' C6 q) ?) T 构造一个指向用户默认目录的 JFileChooser。
' m3 c% |5 r6 g+ i* p* N2 y JFileChooser(String currentDirectoryPath)
; I% W; k: r, |% {' \- r a, _ 构造一个使用给定路径的 JFileChooser。
$ f S1 j" o% y6 r; F5 A) g, d JFileChooser(File currentDirectory)3 ~" T7 Y/ I9 K$ T
使用给定的 File 作为路径来构造一个 JFileChooser
) y6 s: c$ Y! H$ M5 T& q. f$ p% | 此默认目录取决于操作系统。在 Windows 上通常是“我的文档”,在 Unix 上是用户的主目录。
$ `, X3 a5 \' [1 t# Y6 v! N 无参构造方法创建的JFileChooser类对象,其默认目录默认目录取决于操作系统。在 Windows 上通常是“我的文档”,在 Unix 上是用户的主目录。
' p4 {4 z2 A3 O7 K$ X 另外两个构造方法,虽然传递参数的类型不同,但均指某个目录。若参数传递时传入“null”,则相当于使用“JFileChooser()”创建JFileChooser类对象。5 P; i( Z. m# g, a
JFileChooser类中常用方法如下表。$ r2 _' Z7 p/ M# v" C
表8-17 JFileChooser常用方法
' }/ F6 I5 P9 c- W9 r 成员方法
9 d4 e6 t( S* Y- M5 c. H 说明' J& }: g" P7 @" a" @7 b
int showOpenDialog(Component parent)
0 w& _% J$ O t% T/ \, }* w" N. r 弹出一个 "Open File" 文件选择器对话框+ k- c) W+ U! _/ m" W* [7 k ~
int showSaveDialog(Component parent) 弹出一个 "Save File" 文件选择器对话框
" B' D% u) t! Y showDialog(Component parent, String approveButtonText) 弹出具有自定义 approve 按钮的自定义文件选择器对话框) N* ]9 u% H) A2 F. r
File getSelectedFile()
2 h% E! X! @; l+ f/ y 返回选中的文件 P' ^* U* b$ J2 ^# T! B
对于showOpenDialog等显示对话框的方法将返回一个整数,可能取值情况是:
% V% t# p4 }4 t9 Z+ F$ D JFileChooser.CANCEL_OPTION —按取消键退出对话框,无文件选取
+ m' L1 K, o4 b7 ?# S JFileChooser.APPROVE_OPTION —正常选取文件8 t1 S& r6 D0 b9 e" G5 e
JFileChooser.ERROR_OPTION —发生错误或者该对话框已被解除而退出对话框0 m& ^0 U( B* x
所以在文件选取对话框交互结束后,应进行判断,是否从对话框中选取了文件,然后根据返回值情况进行处理。
! f; n( R, b6 V6 ^# I' _ 例8-12演示了JFileChooser类的showOpenDialog方法的使用,JFileChooser一般用于可视化的文件读取及保存,本例只是将读取的文件名显示出来,对于进一步的文件读取及保存工作读者可在学习了I/O流后完善本实例。
8 y! d; \( s, d) u9 T [例8-12]; a! `+ T& z# s- x8 B3 u( r
import java.awt.*;. `- P! U$ K8 E* H- D H, C! A
import javax.swing.*;
' J6 o0 P+ v& w; R import java.awt.event.*;
" x4 S! c- A* B class JFileChooserTest extends JFrame{ S/ u) _7 q% U1 l: F6 k
private JLabel label = new JLabel("所选文件路径:");
, x/ B* B, q- Q% N% p) s private JTextField tfFileName = new JTextField(25);! I, ]" H9 b$ m; s# i8 y1 A, e* y
private JButton btnOpen = new JButton("浏览");( d J6 I% K4 s# q8 L# z
public JFileChooserTest(String title){
& [4 O3 x, l2 S: ^, x" t super(title);* M2 Z, g7 L# ]* z! I6 D$ T' ~! r; u) C' }
Container contentPane = this.getContentPane();
" U) i) b4 I: Y+ C6 N/ ~, j contentPane.setLayout(new FlowLayout(5));
+ }( x. M2 T9 V! h contentPane.add(label);
, g- M+ A) Q8 X contentPane.add(tfFileName);) n/ K2 T3 y# C5 d. F4 \3 q6 f
contentPane.add(btnOpen);, o% V* {, t$ b8 l
pack();
2 u3 }! N. L8 J setVisible(true);
, Y( n ]2 ?5 l1 G) {# b" L this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);. n" z Y& D+ U3 o; ?
//监听btnOpen按钮
9 R: m! n) F/ P( W+ d1 M: ~ btnOpen.addActionListener(new MyActionListener());* H6 |7 p' Q6 ]/ u7 r& H7 b( t
}
- ?4 Q3 x/ _& J0 |6 e g- s9 L5 F3 @ |