黑马程序员技术交流社区
标题:
FileDialog问题,求教
[打印本页]
作者:
鲁柯
时间:
2013-1-31 09:19
标题:
FileDialog问题,求教
张老师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);*/
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2