zoukankan      html  css  js  c++  java
  • 为JFileChooser设定扩展名过滤

    --------------------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】

  • 相关阅读:
    java利用zxing编码解码一维码与二维码
    Spring和MyBatis环境整合
    ML中Boosting和Bagging的比較
    理解x64代码模型
    python list.remove(),del()和filter &amp; lambda
    限制文本域中字符输入个数
    arcgis api for flex之专题图制作(饼状图,柱状图等)
    Linux I/O复用中select poll epoll模型的介绍及其优缺点的比較
    开发H5游戏引擎的选择:Egret或Laya?
    C++刷题——2830: 递归求1*1+2*2+3*3+……+n*n
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6677714.html
Copyright © 2011-2022 走看看