张老师Java高级视频教程中GUI部分最后留的练习题
6、 结合JDK帮助文档,编写一个使用FileDialog选择文件名的例子程序。单击主窗口上的打开按钮,打开一个文件对话框,
并将选择的文件路径显示在主窗口上的打开按钮左边的文本框中。在文件对话框中可以对文件类型进行过滤,
每次打开文件对话框时,对话框中的初始显示目录为上次选择的文件所在的目录。
遇到一个头疼的问题,文件对话框打开后,怎么检测到到底点击的是打开呀还是取消呢?费了好长时间做实验,最后的结果是不用自己判断了,直接拿来用就可以了,唉,真是……
发现FileDialog和JFileChooser的文件过滤器用法不一样,在fileNameFilter中限制了扩展名,总算是实现功能了,但是怎么在对话框下的文件类型框中对选择的文件进行限制呢?使用的是FileDialog,不是JFileChooser。请知道的同学回答一下,谢谢。- 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);*/
- }
- }
复制代码 |