FileDialog文件对话框问题

来源:互联网 发布:mac的appstore打不开 编辑:程序博客网 时间:2024/04/16 14:56
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)//发现直接点击取消文件名为nullfileName.setText(name);elsefileName.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);}@Overridepublic void windowStateChanged(WindowEvent e){// TODO Auto-generated method stubSystem.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);*/}}