FileDialog文件对话框问题

package test.gui.filedialog;

import java.awt.Button;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FilenameFilter;

import javax.swing.filechooser.FileNameExtensionFilter;

public class FileDialogTest extends Frame
{
	/**
	 * 张老师Java高级视频教程中GUI部分最后留的练习题
	 * 6、	结合JDK帮助文档,编写一个使用FileDialog选择文件名的例子程序。
	 * 		单击主窗口上的打开按钮,打开一个文件对话框,
	 * 		并将选择的文件路径显示在主窗口上的打开按钮左边的文本框中。
	 * 		在文件对话框中可以对文件类型进行过滤,
	 * 		每次打开文件对话框时,对话框中的初始显示目录为上次选择的文件所在的目录。
	 * 遇到一个头疼的问题,文件对话框打开后,怎么检测到到底点击的是打开呀还是取消呢?
	 * 浪费了好长时间做实验,最后的结果是不用自己判断了,直接拿来用就可以了,唉,真是……
	 * 发现FileDialog和JFileChooser的文件过滤器用法不一样
	 * 有些乱,但总算是实现功能了,还有点不知道怎么在对话框下的文件类型中对选择的文件进行限制
	 */
	
	//主窗口需要使用一个按钮进行操作
	Button button = new Button("点击选择文件");
	//主窗口中显示文件名的文本框
	TextField fileName = new TextField(50);
	//定义一个文件选取对话框
	FileDialog fileDialog = new FileDialog(this, "请选择一个要打开的文件:", FileDialog.LOAD);
	
	//对初始状态进行设定
	public FileDialogTest(String title)
	{
		//调用父类的构造函数,设置标题
		super(title);
		//添加默认关闭事件
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				dispose();
				System.exit(0);
			}
		});
		//设置窗口大小
		setSize(500, 70);
		//使用流式布局管理器
		setLayout(new FlowLayout());
		//添加文本框和按钮到主窗口中
		add(fileName, "Center");
		add(button, "East");
		//设置文件过滤器,只有选择了.java文件才显示在主窗口中
		//fileDialog.setFileFilter(new FileNameExtensionFilter(description, extensions));
		fileDialog.setFilenameFilter(new FilenameFilter()
		{
			public boolean accept(File dir, String name)
			{
				//System.out.println(dir+"\\::"+name);
				//System.out.println(name.endsWith(".txt"));
				return name.endsWith(".java");
			}
		});
		//给按钮添加事件,点击显示文件对话框
		button.addMouseListener(new MouseAdapter()
		{
			public void mousePressed(MouseEvent e)
			{
				fileDialog.setVisible(true);
				boolean flag = false;
				if (fileDialog.getFile()!=null)//防止空指针异常
					flag = fileDialog.getFilenameFilter().accept(new File(fileDialog.getDirectory()), fileDialog.getFile());
				//对话框显示出来后就可以直接获取,不用监听按钮状态了
				String name = fileDialog.getDirectory()+fileDialog.getFile();
				//将选择的文件信息显示在主窗口的文本框中
				if (fileDialog.getFile()!=null && flag)//发现直接点击取消文件名为null
					fileName.setText(name);
				else
					fileName.setText("限制选择的文件扩展名为.java");
			}
		});
		/*这段耗费了不少事件,快被折磨的没脾气了,搞了两个晚上才试出来
		//怎么检测文件对话框上的按钮被点击了呢?窗口关闭这个怎么也不起效果呢?
		//用什么办法可以监听到文件对话框上的按钮被点击了呢,怎么也不能添加ActionListener呢??
		//fileDialog.addActionListener();    真的搞死我了,试了好长时间原来不用添加任何事件呀
		//对话框显示出来后直接获取就可以了
		
		fileDialog.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.out.println("hahahahha");
				String name = fileDialog.getDirectory()+"::"+fileDialog.getFile();
				System.out.println(name);
			}
			@Override
			public void windowStateChanged(WindowEvent e)
			{
				// TODO Auto-generated method stub
				System.out.println("lllllllllllllllllllllllllllllllllll");
				super.windowStateChanged(e);
			}
		});
		*/
		//将主窗口显示出来
		setVisible(true);
	}
	
	public static void main(String[] args)
	{
		Frame frame = new FileDialogTest("文件选取对话框演示");
		//下面的也是当时没办法在实验呢
		/*FileDialog dialog = new FileDialog(new Frame());
		dialog.setVisible(true);
		Component[] coms = dialog.getComponents();
		for (Component com: coms) 
		{
			System.out.println(com.getName());
		}
		String name = dialog.getDirectory();
		System.out.println(name);*/
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值