1. package org.jr.swing;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月14日
  6. * @author Cherami
  7. */
  8. import java.io.*;
  9. import java.awt.*;
  10. import java.awt.event.*;
  11. import javax.swing.*;
  12. import org.jr.swing.filter.*;
  13. /**
  14. * 文件选取器面板。
  15. * 简化了选择一个文件的组件的创建工作。
  16. * @since 0.5
  17. */
  18. public class FileSelector
  19. extends JPanel {
  20. protected JTextField nameField;
  21. protected JButton browserButton;
  22. protected JFileChooser chooser;
  23. /**
  24. * 以指定参数为父窗口创建一个FileSelector。
  25. * 文本框中显示的将是系统的临时目录的路径。
  26. * 文件的过滤器使用全部文本过滤器。
  27. * @param parent 父窗口
  28. * @since 0.5
  29. */
  30. public FileSelector(Component parent) {
  31. this(parent, new File(System.getProperty("java.io.tmpdir", ".")),
  32. new AllFileFilter(), "...");
  33. }
  34. /**
  35. * 以指定的父窗口和过滤器创建一个FileSelector。
  36. * @param parent 父窗口
  37. * @param filter 过滤器
  38. * @since 0.5
  39. */
  40. public FileSelector(Component parent,
  41. javax.swing.filechooser.FileFilter filter) {
  42. this(parent, new File(System.getProperty("java.io.tmpdir", ".")), filter,
  43. "...");
  44. }
  45. /**
  46. * 以指定的参数构造一个FileSelector。
  47. * @param parent 父窗口
  48. * @param dir 文件选取器的初始目录
  49. * @param filter 过滤器
  50. * @param text 浏览按钮的名字
  51. * @since 0.5
  52. */
  53. public FileSelector(final Component parent, File dir,
  54. javax.swing.filechooser.FileFilter filter, String text) {
  55. setLayout(new BorderLayout());
  56. nameField = new JTextField(dir.getAbsolutePath());
  57. browserButton = new JButton(text);
  58. add(nameField, "Center");
  59. add(browserButton, "East");
  60. chooser = new JFileChooser(dir);
  61. chooser.setFileFilter(filter);
  62. chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  63. browserButton.addActionListener(new ActionListener() {
  64. public void actionPerformed(ActionEvent e) {
  65. int result = chooser.showOpenDialog(parent);
  66. if (result == JFileChooser.APPROVE_OPTION) {
  67. File file = chooser.getSelectedFile();
  68. nameField.setText(file.getAbsolutePath());
  69. }
  70. }
  71. }
  72. );
  73. }
  74. /**
  75. * 得到选定文件或者目录的名称。
  76. * @return 选定文件或者目录的名称
  77. * @since 0.5
  78. */
  79. public String getFile() {
  80. return nameField.getText();
  81. }
  82. }