Java Swing组件JFileChooser用法实例分析

网友投稿 454 2023-03-17


Java Swing组件JFileChooser用法实例分析

本文实例讲述了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" })

//

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();

}//

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 */

//

/* 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;

}

}

} catDOwwQch (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);

}

//

/* 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程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java Swing实现JTable检测单元格数据变更事件的方法示例
下一篇:Java+MySQL实现学生信息管理系统源码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~