--------------------siwuxie095
工程名:TestFileChooser
包名:com.siwuxie095.filechooser
类名:TestExtension.java
工程结构目录如下:
代码:
package com.siwuxie095.filechooser;
import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException;
import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.EmptyBorder; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
/** * JFileChooser 是 Java Swing 框架中的文件选择器, * 在应用程序中经常会遇到打开文件和保存文件等操作, * 文件选择器 JFileChooser 是专门应对这种情况而出现的 * * @author siwux * */
public class TestExtension extends JFrame {
private JPanel contentPane;
//声明一个 JFileChooser 对象 JFileChooser chooser;
/** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TestExtension frame = new TestExtension(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); }
/** * Create the frame. */ public TestExtension() {
try { UIManager.setLookAndFeel(new WindowsLookAndFeel()); } catch (UnsupportedLookAndFeelException e1) { e1.printStackTrace(); }
//将 chooser 实例化 chooser=new JFileChooser();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JButton btnOpen = new JButton("Open"); btnOpen.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //在弹出对话框之前,创建文件类型的过滤器 FileNameExtensionFilter filter= new FileNameExtensionFilter("仅能打开 *.txt *.jar", "txt","jar"); //为chooser应用该filter chooser.setFileFilter(filter);
//设定当前可选择的文件类型,设定为能选择文件和文件夹 //如果没有设定,默认为 FILES_ONLY,即只能选择文件 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
//将chooser 设定为 可多选 //如果没有设定,默认为 false,即只能单选 chooser.setMultiSelectionEnabled(true);
/** * 弹出一个打开文件的对话框 showOpenDialog() * 需要指定一个 父级窗体,或指定为 null * 返回值是 int 类型,创建以接收返回值 */ int value=chooser.showOpenDialog(TestExtension.this);
//如果返回 APPROVE_OPTION,说明有文件被成功返回,即 成功打开文件 //也可以使用对象调用,即 chooser.APPROVE_OPTION if (value==JFileChooser.APPROVE_OPTION) { File file[]=chooser.getSelectedFiles(); for (int i = 0; i < file.length; i++) { System.out.println(file[i].getAbsolutePath()); } } } }); btnOpen.setFocusable(false); contentPane.add(btnOpen);
JButton btnSave = new JButton("Save"); btnSave.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) {
//在弹出对话框之前,创建文件类型的过滤器 FileNameExtensionFilter filter1,filter2; //前面是 描述,后面是 扩展名 filter1=new FileNameExtensionFilter(".avi", "avi"); filter2=new FileNameExtensionFilter(".png", "png"); //为chooser应用filter chooser.setFileFilter(filter1); chooser.setFileFilter(filter2);
int valuex=chooser.showSaveDialog(TestExtension.this);
/** * 如果返回 APPROVE_OPTION,说明有文件被成功返回,即 成功保存文件 * 这里实际上是将一个不存在的文件包装成了一个假设存在的文件,然后将之返回 * 但该文件并没有真实的被创建,仅仅是创建了一个文件对象,并可设定路径 * 需要使用 createNewFile() 创建文件 */ if (valuex==chooser.APPROVE_OPTION) {
try {
FileFilter filterx=chooser.getFileFilter(); //获取扩展名的描述,当做扩展名 加给文件 String ext=filterx.getDescription(); File filex=chooser.getSelectedFile(); File newFile=null; //如果没有扩展名就自动加上,如果有就不加 if (filex.getAbsolutePath().toUpperCase().endsWith(ext.toUpperCase())) { newFile=filex; }else { newFile=new File(filex.getAbsolutePath()+ext); }
if (!newFile.exists()) {
newFile.createNewFile();
System.out.println(newFile.getAbsolutePath());
} } catch (IOException e1) { e1.printStackTrace(); }
} } }); btnSave.setFocusable(false); contentPane.add(btnSave); }
} |
将窗体 JFrame 的 LookAndFeel 设定为 Windows
将根面板 contentPane 的布局改为 Flow Layout,在其中添加两个 JButton
将两个 JButton 的 focusable 属性设为 false,并将其文本(text)分别改为:
Open 和 Save,再分别 Rename 为:btnOpen 和 btnSave
为两个 JButton 添加 mouseClicked 事件,点击 按钮 弹出对话框
运行程序:
【made by siwuxie095】