首页 > 编程 > Java > 正文

Java Swing组件JFileChooser用法实例分析

2019-11-26 10:57:02
字体:
来源:转载
供稿:网友

本文实例讲述了Java Swing组件JFileChooser用法。分享给大家供大家参考,具体如下:

JFileChooser文件选择器是Swing中经常用到的一个控件。它的使用主要包含以下几个参数:

1.当前路径。也就是它第一次打开时所在的路径,许多软件喜欢设置为桌面。

2.文件过滤器。通过设置文件过滤器,只有特定类型的文件是可见的,比如文本,音频,等。

3.选择模式。包含三种情况:仅文件, 仅目录, 文件或目录。

4.是否允许多选。

JFileChooser的参数当然不止以上4种,它还有很多高级选项,比如你可以对文件的显示图标进行定制等,由于不经常用,这里不再介绍。

有2个地方要注意:

1.文件过滤器建议使用FileNameExtensionFilter,它是FileFilter的子类,以非常方便的方法实现了过滤器。用法见代码。

2.getSelectedFiles()方法,它只在isMultiSelectionEnable()方法返回true是有效。也就是说,如果你不允许多选,则只能使用getSelectedFile()方法,否则只能得到一个空的文件列表。

下面通过一个demo来展示它的基本用法。

package awtDemo;import java.io.File;import javax.swing.JFileChooser;import javax.swing.JOptionPane;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.filechooser.FileSystemView;/** * * @author pzy */@SuppressWarnings("serial")public class JFileChooserFrame extends javax.swing.JFrame {  /**   * Creates new form JFileChooserFrame   */  public JFileChooserFrame() {    initComponents();  }  /**   * This method is called from within the constructor to initialize the form.   * WARNING: Do NOT modify this code. The content of this method is always   * regenerated by the Form Editor.   */  @SuppressWarnings({ "unchecked", "rawtypes" })  // <editor-fold defaultstate="collapsed" desc="Generated Code">  private void initComponents() {    fileFilterisBG = new javax.swing.ButtonGroup();    isMultiSelectBG = new javax.swing.ButtonGroup();    jPanel1 = new javax.swing.JPanel();    text_rb = new javax.swing.JRadioButton();    video_rb = new javax.swing.JRadioButton();    audio_rb = new javax.swing.JRadioButton();    all_rb = new javax.swing.JRadioButton();    jPanel2 = new javax.swing.JPanel();    jComboBox1 = new javax.swing.JComboBox();    multiSelect_rb = new javax.swing.JRadioButton();    singleSelect_rb = new javax.swing.JRadioButton();    jPanel3 = new javax.swing.JPanel();    jButton1 = new javax.swing.JButton();    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);    setLocationByPlatform(true);    jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("文件类型"));    fileFilterisBG.add(text_rb);    text_rb.setText("文本");    fileFilterisBG.add(video_rb);    video_rb.setText("视频");    fileFilterisBG.add(audio_rb);    audio_rb.setText("音频");    fileFilterisBG.add(all_rb);    all_rb.setSelected(true);    all_rb.setText("所有");    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);    jPanel1.setLayout(jPanel1Layout);    jPanel1Layout.setHorizontalGroup(      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)        .addComponent(text_rb)        .addGap(29, 29, 29)        .addComponent(video_rb)        .addGap(35, 35, 35)        .addComponent(audio_rb)        .addGap(39, 39, 39)        .addComponent(all_rb)        .addGap(32, 32, 32))    );    jPanel1Layout.setVerticalGroup(      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(jPanel1Layout.createSequentialGroup()        .addContainerGap()        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)          .addComponent(video_rb)          .addComponent(text_rb)          .addComponent(audio_rb)          .addComponent(all_rb))        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))    );    jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("选择模式"));    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "仅文件", "仅目录", "文件或目录" }));    jComboBox1.addActionListener(new java.awt.event.ActionListener() {      public void actionPerformed(java.awt.event.ActionEvent evt) {        jComboBox1ActionPerformed(evt);      }    });    isMultiSelectBG.add(multiSelect_rb);    multiSelect_rb.setText("可多选");    isMultiSelectBG.add(singleSelect_rb);    singleSelect_rb.setSelected(true);    singleSelect_rb.setText("不可多选");    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);    jPanel2.setLayout(jPanel2Layout);    jPanel2Layout.setHorizontalGroup(      jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(jPanel2Layout.createSequentialGroup()        .addContainerGap()        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)        .addGap(18, 18, 18)        .addComponent(multiSelect_rb, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)        .addGap(18, 18, 18)        .addComponent(singleSelect_rb, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)        .addContainerGap(14, Short.MAX_VALUE))    );    jPanel2Layout.setVerticalGroup(      jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(jPanel2Layout.createSequentialGroup()        .addContainerGap()        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)          .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)          .addComponent(multiSelect_rb)          .addComponent(singleSelect_rb))        .addContainerGap(16, Short.MAX_VALUE))    );    jButton1.setText("开始");    jButton1.addActionListener(new java.awt.event.ActionListener() {      public void actionPerformed(java.awt.event.ActionEvent evt) {        jButton1ActionPerformed(evt);      }    });    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);    jPanel3.setLayout(jPanel3Layout);    jPanel3Layout.setHorizontalGroup(      jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(jPanel3Layout.createSequentialGroup()        .addGap(117, 117, 117)        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))    );    jPanel3Layout.setVerticalGroup(      jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(jPanel3Layout.createSequentialGroup()        .addGap(26, 26, 26)        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)        .addContainerGap(19, Short.MAX_VALUE))    );    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());    getContentPane().setLayout(layout);    layout.setHorizontalGroup(      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(layout.createSequentialGroup()        .addContainerGap()        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)          .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)          .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)          .addGroup(layout.createSequentialGroup()            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)            .addGap(84, 84, 84)))        .addContainerGap())    );    layout.setVerticalGroup(      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)      .addGroup(layout.createSequentialGroup()        .addGap(8, 8, 8)        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)        .addGap(18, 18, 18)        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)        .addGap(18, 18, 18)        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))    );    pack();  }// </editor-fold>  private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {    // TODO add your handling code here:    String itemString = jComboBox1.getSelectedItem().toString();    if ("仅文件".equals(itemString)) {      fileSelectionMode = JFileChooser.FILES_ONLY;    } else if ("仅目录".equals(itemString)) {      fileSelectionMode = JFileChooser.DIRECTORIES_ONLY;    } else if ("文件或目录".equals(itemString)) {      fileSelectionMode = JFileChooser.FILES_AND_DIRECTORIES;    }  }  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {    // TODO add your handling code here:    fileChooser = new JFileChooser();    //初始化当前路径    FileSystemView fsv = FileSystemView.getFileSystemView();    File homeFile =fsv.getHomeDirectory();  //这便是读取桌面路径的方法了    fileChooser.setCurrentDirectory(homeFile);    //初始化文件过滤器    if (text_rb.isSelected()) {      filter = new FileNameExtensionFilter("文本文件", "log", "txt");      fileChooser.setFileFilter(filter);    }    if (video_rb.isSelected()) {      filter = new FileNameExtensionFilter("视频文件", "mp4", "mkv");      fileChooser.setFileFilter(filter);    }    if (audio_rb.isSelected()) {      filter = new FileNameExtensionFilter("音频文件", "mp3", "wma");      fileChooser.setFileFilter(filter);    }    //初始化选择模式    fileChooser.setFileSelectionMode(fileSelectionMode);    //是否允许多选    if (multiSelect_rb.isSelected()) {      fileChooser.setMultiSelectionEnabled(true);    }    else if(singleSelect_rb.isSelected()) {      fileChooser.setMultiSelectionEnabled(false);    }    //打开文件选择器    int i = fileChooser.showDialog(this, "选择");    if(i == JFileChooser.APPROVE_OPTION){      StringBuilder sb;      if(fileChooser.isMultiSelectionEnabled()){      sb = new StringBuilder("您选择了以下文件:");      File [] files = fileChooser.getSelectedFiles();      for (File file : files) {        sb.append("/n");        sb.append(file.getName());      }      }      else{        File file = fileChooser.getSelectedFile();        sb = new StringBuilder("您选择的文件是:");         sb.append("/n");        sb.append(file.getName());      }      JOptionPane.showMessageDialog(this, sb);    }  }  /**   * @param args the command line arguments   */  public static void main(String args[]) {    /* Set the Nimbus look and feel */    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html     */    try {      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {        if ("Nimbus".equals(info.getName())) {          javax.swing.UIManager.setLookAndFeel(info.getClassName());          break;        }      }    } catch (ClassNotFoundException ex) {      java.util.logging.Logger.getLogger(JFileChooserFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);    } catch (InstantiationException ex) {      java.util.logging.Logger.getLogger(JFileChooserFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);    } catch (IllegalAccessException ex) {      java.util.logging.Logger.getLogger(JFileChooserFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);    } catch (javax.swing.UnsupportedLookAndFeelException ex) {      java.util.logging.Logger.getLogger(JFileChooserFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);    }    //</editor-fold>    /* Create and display the form */    java.awt.EventQueue.invokeLater(new Runnable() {      public void run() {        new JFileChooserFrame().setVisible(true);      }    });  }  private JFileChooser fileChooser;  private FileNameExtensionFilter filter;  private int fileSelectionMode = JFileChooser.FILES_ONLY;  // Variables declaration - do not modify  private javax.swing.JRadioButton all_rb;  private javax.swing.JRadioButton audio_rb;  private javax.swing.ButtonGroup fileFilterisBG;  private javax.swing.ButtonGroup isMultiSelectBG;  private javax.swing.JButton jButton1;  @SuppressWarnings("rawtypes") private javax.swing.JComboBox jComboBox1;  private javax.swing.JPanel jPanel1;  private javax.swing.JPanel jPanel2;  private javax.swing.JPanel jPanel3;  private javax.swing.JRadioButton multiSelect_rb;  private javax.swing.JRadioButton singleSelect_rb;  private javax.swing.JRadioButton text_rb;  private javax.swing.JRadioButton video_rb;  // End of variables declaration}

运行效果如下:

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表