A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲁柯 高级黑马   /  2013-1-31 09:19  /  1831 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

  2. import java.awt.Button;
  3. import java.awt.FileDialog;
  4. import java.awt.FlowLayout;
  5. import java.awt.Frame;
  6. import java.awt.TextField;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.WindowAdapter;
  12. import java.awt.event.WindowEvent;
  13. import java.io.File;
  14. import java.io.FilenameFilter;

  15. import javax.swing.filechooser.FileNameExtensionFilter;

  16. public class FileDialogTest extends Frame
  17. {
  18. /**
  19. * 张老师Java高级视频教程中GUI部分最后留的练习题
  20. * 6、 结合JDK帮助文档,编写一个使用FileDialog选择文件名的例子程序。
  21. * 单击主窗口上的打开按钮,打开一个文件对话框,
  22. * 并将选择的文件路径显示在主窗口上的打开按钮左边的文本框中。
  23. * 在文件对话框中可以对文件类型进行过滤,
  24. * 每次打开文件对话框时,对话框中的初始显示目录为上次选择的文件所在的目录。
  25. * 遇到一个头疼的问题,文件对话框打开后,怎么检测到到底点击的是打开呀还是取消呢?
  26. * 浪费了好长时间做实验,最后的结果是不用自己判断了,直接拿来用就可以了,唉,真是……
  27. * 发现FileDialog和JFileChooser的文件过滤器用法不一样
  28. * 有些乱,但总算是实现功能了,还有点不知道怎么在对话框下的文件类型中对选择的文件进行限制
  29. */

  30. //主窗口需要使用一个按钮进行操作
  31. Button button = new Button("点击选择文件");
  32. //主窗口中显示文件名的文本框
  33. TextField fileName = new TextField(50);
  34. //定义一个文件选取对话框
  35. FileDialog fileDialog = new FileDialog(this, "请选择一个要打开的文件:", FileDialog.LOAD);

  36. //对初始状态进行设定
  37. public FileDialogTest(String title)
  38. {
  39. //调用父类的构造函数,设置标题
  40. super(title);
  41. //添加默认关闭事件
  42. addWindowListener(new WindowAdapter()
  43. {
  44. public void windowClosing(WindowEvent e)
  45. {
  46. dispose();
  47. System.exit(0);
  48. }
  49. });
  50. //设置窗口大小
  51. setSize(500, 70);
  52. //使用流式布局管理器
  53. setLayout(new FlowLayout());
  54. //添加文本框和按钮到主窗口中
  55. add(fileName, "Center");
  56. add(button, "East");
  57. //设置文件过滤器,只有选择了.java文件才显示在主窗口中
  58. //fileDialog.setFileFilter(new FileNameExtensionFilter(description, extensions));
  59. fileDialog.setFilenameFilter(new FilenameFilter()
  60. {
  61. public boolean accept(File dir, String name)
  62. {
  63. //System.out.println(dir+"\\::"+name);
  64. //System.out.println(name.endsWith(".txt"));
  65. return name.endsWith(".java");
  66. }
  67. });
  68. //给按钮添加事件,点击显示文件对话框
  69. button.addMouseListener(new MouseAdapter()
  70. {
  71. public void mousePressed(MouseEvent e)
  72. {
  73. fileDialog.setVisible(true);
  74. boolean flag = false;
  75. if (fileDialog.getFile()!=null)//防止空指针异常
  76. flag = fileDialog.getFilenameFilter().accept(new File(fileDialog.getDirectory()), fileDialog.getFile());
  77. //对话框显示出来后就可以直接获取,不用监听按钮状态了
  78. String name = fileDialog.getDirectory()+fileDialog.getFile();
  79. //将选择的文件信息显示在主窗口的文本框中
  80. if (fileDialog.getFile()!=null && flag)//发现直接点击取消文件名为null
  81. fileName.setText(name);
  82. else
  83. fileName.setText("限制选择的文件扩展名为.java");
  84. }
  85. });
  86. /*这段耗费了不少事件,快被折磨的没脾气了,搞了两个晚上才试出来
  87. //怎么检测文件对话框上的按钮被点击了呢?窗口关闭这个怎么也不起效果呢?
  88. //用什么办法可以监听到文件对话框上的按钮被点击了呢,怎么也不能添加ActionListener呢??
  89. //fileDialog.addActionListener(); 真的搞死我了,试了好长时间原来不用添加任何事件呀
  90. //对话框显示出来后直接获取就可以了

  91. fileDialog.addWindowListener(new WindowAdapter()
  92. {
  93. public void windowClosing(WindowEvent e)
  94. {
  95. System.out.println("hahahahha");
  96. String name = fileDialog.getDirectory()+"::"+fileDialog.getFile();
  97. System.out.println(name);
  98. }
  99. @Override
  100. public void windowStateChanged(WindowEvent e)
  101. {
  102. // TODO Auto-generated method stub
  103. System.out.println("lllllllllllllllllllllllllllllllllll");
  104. super.windowStateChanged(e);
  105. }
  106. });
  107. */
  108. //将主窗口显示出来
  109. setVisible(true);
  110. }

  111. public static void main(String[] args)
  112. {
  113. Frame frame = new FileDialogTest("文件选取对话框演示");
  114. //下面的也是当时没办法在实验呢
  115. /*FileDialog dialog = new FileDialog(new Frame());
  116. dialog.setVisible(true);
  117. Component[] coms = dialog.getComponents();
  118. for (Component com: coms)
  119. {
  120. System.out.println(com.getName());
  121. }
  122. String name = dialog.getDirectory();
  123. System.out.println(name);*/

  124. }

  125. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马