Java Swing容器:文件对话框

       文件对话框是专门用于对文件或目录进行浏览和选择的对话框。可以使用JFileChooser类创建文件对话框,其主要构造方法如下:

  • JFileChooser():根据用户默认目录创建文件对话框。
  • JFileChooser(File currentDirectory):根据File型参数所指定的目录创建文件对话框。
  • JFileChooser(String currentDirectoryPath):根据String型参数指定的目录创建文件对话框。

       刚创建的文件对话框是不可见的,可以调用以下几种方法将其显示出来:

  • int showOpenDialog(Component parent):显示一个打开文件对话框。
  • int showSaveDialog(Component parent):显示一个保存文件对话框。
  • int showDialog(Component parent, String appoveButtonText):显示一个自定义对话框,其中,对话框的标题和按钮的文本由参数appoveButtonText来指定。

       在上述方法中,参数parent指定文件对话框的父组件,其决定了文件对话框的显示位置,如果该参数为null,则文件对话框会显示在屏幕的正中。这些方法的返回值是一个整数,这个整数表示用户的选择操作,其可以取如下几种值:

        JFileChooser.APPROVE_OPTION:用户点击了打开或确定按钮,

        JFileChooser.CANCEL_OPTION:用户点击了取消按钮或关闭了对话框,

        JFileChooser.ERROR_OPTION:发生错误或对话框关闭。

       可以通过setFileSelectionMode(int mode)方法设置文件的选择方式,其中,参数mode的取值和含义如下:

        JFileChooser.FILES_ONLY:只能选择文件,

        JFileChooser.DIRECTORIES_ONLY:只能选择目录,

        JFileChooser.FILE_AND_DIRECTORIES:文件和目录都能选择(默认情况)。

       可以用setFileFilter(FileFilter filter)方法设置默认可选择的文件类型,其中,FileFilter是一个接口,它是File的过滤器,在实际应用中,可以使用该接口的实现类FileNameExtensionFilter的对象作为方法的参数。例如,下面代码设置可选文件的后缀名为doc、docx和txt。

JFileChooser fileChooser=new JFileChooser();

FileNameExtensionFilter filter = new FileNameExtensionFilter(

"files(*.doc,*.docx,*.txt)", "doc", "docx","txt");

fileChooser.setFileFilter(filter);

       当用户打开文件对话框后,默认情况,文件只能进行单选,可以通过getSelectedFile()方法获得用户所选择的文件。可以通过方法setMultiSelectionEnabled(boolean b)设置文件是否允许多选,如果b的值为true,则文件可以进行多选,这时可以使用getSelectedFiles()方法获得用户选择的所有文件。

【例1】文件对话框的使用。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
import java.io.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
public class JFileChooserDemo extends JFrame {
	JFileChooser fileChooser;
	JButton openButton=new JButton("打开文件");
	JButton saveButton=new JButton("保存文件");
	JButton saveAsButton=new JButton("另存为");
	JTextField textField=new JTextField(20);
	JTextArea textArea=new JTextArea();
	public JFileChooserDemo() {
		JFrame frame=this;
		setTitle("文件对话框示例");
		setSize(400, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		Container contentPane=this.getContentPane();
		JPanel panel1=new JPanel();
		panel1.add(new JLabel("保存文件名:"));panel1.add(textField);
		JPanel panel2=new JPanel();
		panel2.add(openButton);
		panel2.add(saveButton);
		panel2.add(saveAsButton);
		contentPane.add(panel1,BorderLayout.NORTH);
		contentPane.add(new JScrollPane(textArea),BorderLayout.CENTER);
		contentPane.add(panel2,BorderLayout.SOUTH);
		//"打开文件"按钮注册动作事件监听器
		openButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileChooser=new JFileChooser();
				fileChooser.setMultiSelectionEnabled(true);//允许文件多选
				int select=fileChooser.showOpenDialog(frame);//显示打开文件对话框
				if(select==JFileChooser.APPROVE_OPTION) {
					File[] files=fileChooser.getSelectedFiles();//获取被选择的所有文件
					for(File file:files) {
						//将所选择的文件信息添加到文本区中
						textArea.append("打开文件:"+file.getAbsolutePath()+"\n");
					}
				}
			}
		});
		//"保存文件"按钮注册动作事件监听
		saveButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileChooser=new JFileChooser();	
				//设置被选择的文件
				fileChooser.setSelectedFile(new File(textField.getText()));
				int select=fileChooser.showSaveDialog(frame);
				if(select==JFileChooser.APPROVE_OPTION) {
					File file=fileChooser.getSelectedFile();//获取被选择的文件
					File directory=fileChooser.getCurrentDirectory();//获取当前目录
					String fileName=file.getName();
					String directoryName=directory.getAbsolutePath();
					textArea.append("保存文件:"+directoryName+"\\"+fileName+"\n");
				}
			}
		});
		//"另存为"按钮注册动作事件监听器
		saveAsButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fileChooser=new JFileChooser();
				//设置默认可选文件类型
				FileNameExtensionFilter filter = new FileNameExtensionFilter(
						"files(*.doc,*.docx,*.txt)", "doc", "docx","txt");
				fileChooser.setFileFilter(filter);
				//设置被选择的文件
				fileChooser.setSelectedFile(new File(textField.getText()));
				int select=fileChooser.showDialog(frame,"另存为");
				if(select==JFileChooser.APPROVE_OPTION) {
					File file=fileChooser.getSelectedFile();//获取被选择的文件
					File directory=fileChooser.getCurrentDirectory();//获取当前目录
					String fileName=file.getName();
					String directoryName=directory.getAbsolutePath();
					textArea.append("文件另存在:"+directoryName+"\\"+fileName+"\n");
				}
			}
		});
		this.setVisible(true);
	}
	public static void main(String[] args) {
		JFileChooserDemo frame=new JFileChooserDemo();
	}
}

       执行上述程序,运行结果如图1(a)所示。当用户点击打开文件按钮后,则会弹出如图1(b)所示的打开文件对话框,用户在该对话框中可以选择多个文件,点击打开按钮后,这些文件的绝对路径被添加到本文区中,如图1(c)所示。当用户在窗口上方的文本框中输入被保存的文件名,点击保存文件按钮后,则会弹出如图1(d)所示的保存文件对话框,点击另存为按钮后,则会弹出如图1(e)所示的自定义文件对话框,用户在对话框中点击打开/另存为按钮后,被保存文件的绝对路径添加到文本区中,如图1(f)所示。

(a)

(b)

(c)

(d)

(e)

(f)

图1. 文件对话框示例

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值