zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java文件对话框过滤特定文件类型示例

JAVA文件 示例 过滤 特定 对话框 文件类型
2023-06-13 09:15:18 时间

思路分析:

因为是窗体应用,首先看视图层。需要一个按钮控件JButton用来选择文件夹;需要一个标签控件JLabel用来显示选择的路径;需要一个标签控件JLabel提示用户输入什么;需要一个文本框控件JTextField供用户输入文件类型;需要一个表格控件JTable显示选中目录下指定类型的文件。
对于按钮控件,为其绑定事件处理方法,在该方法中首先创建JFileChooser文件选择器对象,为该对象设置选择器的过滤器,即通过JFileChoose类的setFileSelectionMode()方法设定只能选择路径,然后执行showDialog()方法,再使用JFileChooser类的getSelectedFile()方法获取选中路径,赋值给一个File型变量,使用toString()方法将该路径显示在标签中,最后获取过滤后的符合条件的文件数组。
对于文本框控件,一旦里面的文字发生变化,就要重新对选中路径中的文件进行过滤,所以通过JTextField类的addCaretListener()方法为其绑定事件处理方法,在该方法中获取过滤后的符合条件的文件数组。
因为按钮控件和文本框控件都要实现过滤及显示,故可以将过滤及显示单独作为一个方法,在该方法中首先判断当前路径是否为空,若不为空则使用File类的listFiles()方法获取符合条件的文件数组,赋值给一个File型数组,然后使用JTable类的getModel()方法获取表格的数据模型,使用DefaultTableModel类的setRowCount()方法先将表格清空,然后使用foreach()循环遍历文件数组,在循环中使用Object[]数组创建表格行数据,调用File类的getName()方法获取文件名,length()方法获取文件大小,lastModified()方法获取修改日期,最后使用DefaultTableModel类的addRow()方法添加行数据到表格模型。
代码如下:

复制代码代码如下:


importjava.awt.BorderLayout;
importjava.awt.EventQueue;
importjava.awt.GridBagConstraints;
importjava.awt.GridBagLayout;
importjava.awt.Insets;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.File;
importjava.sql.Date;

importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.JTextField;
importjavax.swing.border.EmptyBorder;
importjavax.swing.event.CaretEvent;
importjavax.swing.event.CaretListener;
importjavax.swing.table.DefaultTableModel;

publicclassListCustomTypeFileextendsJFrame{
    /**
     *
     */
    privatestaticfinallongserialVersionUID=-6263975104443132420L;

    /**
     *自定义扩展名过滤器
     *
     *@author李钟尉
     */
    privatefinalclassCustomFilterimplementsjava.io.FileFilter{
        @Override
        publicbooleanaccept(Filepathname){
            //获取用户设置的指定扩展名
            StringextName=extNameField.getText();
            if(extName==null||extName.isEmpty())
                returnfalse;
            if(!extName.startsWith("."))//判断扩展名前缀
                extName="."+extName;//完事扩展名前缀
            extName=extName.toLowerCase();
            //判断扩展名与过滤文件名是否符合要求
            if(pathname.getName().toLowerCase().endsWith(extName))
                returntrue;
            returnfalse;
        }
    }

    privateJPanelcontentPane;
    privateJTextFieldextNameField;
    privateJTabletable;
    privateFiledir;
    privateJLabellabel;

    /**
     *Launchtheapplication.
     */
    publicstaticvoidmain(String[]args){
        EventQueue.invokeLater(newRunnable(){
            publicvoidrun(){
                try{
                    ListCustomTypeFileframe=newListCustomTypeFile();
                    frame.setVisible(true);
                }catch(Exceptione){
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     *Createtheframe.
     */
    publicListCustomTypeFile(){
        setTitle("显示指定类型的文件");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100,100,450,300);
        contentPane=newJPanel();
        contentPane.setBorder(newEmptyBorder(5,5,5,5));
        contentPane.setLayout(newBorderLayout(0,0));
        setContentPane(contentPane);

        JPanelpanel=newJPanel();
        contentPane.add(panel,BorderLayout.NORTH);
        GridBagLayoutgbl_panel=newGridBagLayout();
        gbl_panel.columnWidths=newint[]{93,54,0};
        gbl_panel.rowHeights=newint[]{23,0,0};
        gbl_panel.columnWeights=newdouble[]{0.0,1.0,Double.MIN_VALUE};
        gbl_panel.rowWeights=newdouble[]{0.0,0.0,Double.MIN_VALUE};
        panel.setLayout(gbl_panel);

        JButtonbutton=newJButton("选择文件夹");
        button.addActionListener(newActionListener(){
            publicvoidactionPerformed(ActionEvente){
                do_button_actionPerformed(e);
            }
        });
        GridBagConstraintsgbc_button=newGridBagConstraints();
        gbc_button.anchor=GridBagConstraints.NORTH;
        gbc_button.gridx=0;
        gbc_button.gridy=0;
        panel.add(button,gbc_button);

        label=newJLabel("文件夹");
        GridBagConstraintsgbc_label=newGridBagConstraints();
        gbc_label.fill=GridBagConstraints.HORIZONTAL;
        gbc_label.gridx=1;
        gbc_label.gridy=0;
        panel.add(label,gbc_label);

        JLabellabel_1=newJLabel("输入指定文件扩展名称:");
        GridBagConstraintsgbc_label_1=newGridBagConstraints();
        gbc_label_1.anchor=GridBagConstraints.EAST;
        gbc_label_1.insets=newInsets(0,0,0,5);
        gbc_label_1.gridx=0;
        gbc_label_1.gridy=1;
        panel.add(label_1,gbc_label_1);

        extNameField=newJTextField();
        extNameField.addCaretListener(newCaretListener(){
            publicvoidcaretUpdate(CaretEvente){
                do_extNameField_caretUpdate(e);
            }
        });
        extNameField.setText(".gif");
        GridBagConstraintsgbc_extNameField=newGridBagConstraints();
        gbc_extNameField.insets=newInsets(0,0,5,0);
        gbc_extNameField.fill=GridBagConstraints.HORIZONTAL;
        gbc_extNameField.gridx=1;
        gbc_extNameField.gridy=1;
        panel.add(extNameField,gbc_extNameField);
        extNameField.setColumns(10);

        JScrollPanescrollPane=newJScrollPane();
        contentPane.add(scrollPane,BorderLayout.CENTER);

        table=newJTable();
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setModel(newDefaultTableModel(newObject[][]{},newString[]{"文件名称","文件大小","修改日期"}){
            /**
                     *
                     */
                    privatestaticfinallongserialVersionUID=5274214559103654856L;
            boolean[]columnEditables=newboolean[]{false,false,false};

            publicbooleanisCellEditable(introw,intcolumn){
                returncolumnEditables[column];
            }
        });
        table.getColumnModel().getColumn(0).setPreferredWidth(220);
        table.getColumnModel().getColumn(1).setPreferredWidth(85);
        table.getColumnModel().getColumn(2).setPreferredWidth(110);
        scrollPane.setViewportView(table);
    }

    /**
     *选择文件夹按钮的事件处理方法
     *
     *@parame
     */
    protectedvoiddo_button_actionPerformed(ActionEvente){
        JFileChooserchooser=newJFileChooser();//创建文件选择器
        //设置选择器的过滤器
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        chooser.showDialog(this,null);
        dir=chooser.getSelectedFile();
        getLabel().setText(dir.toString());
        //获取过滤后的符合条件的文件数组
        listFiles();
    }

    /**
     *显示文件夹中的文件
     */
    privatevoidlistFiles(){
        if(dir==null)
            return;
        //获取符合条件的文件数组
        File[]files=dir.listFiles(newCustomFilter());
        //获取表格的数据模型
        DefaultTableModelmodel=(DefaultTableModel)table.getModel();
        model.setRowCount(0);
        for(Filefile:files){//遍历文件数组
            //创建表格行数据
            Object[]row={file.getName(),file.length(),
                    newDate(file.lastModified())};
            model.addRow(row);//添加行数据到表格模型
        }
    }

    protectedvoiddo_extNameField_caretUpdate(CaretEvente){
        listFiles();
    }

    protectedJLabelgetLabel(){
        returnlabel;
    }
}

效果如图: