Java窗体动态加载磁盘文件的实现方法

在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹。本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件;如果该文件是隐藏文件,就在属性栏中显示“隐藏文件”。要用到进度条来表示是否完成。

思路如下:

首先是视图层。JTextField、JButton、JScrollPane、JTable神马的就不用再提了,都是老盆友了,在这里因为要用到进度条,所以会有一个新盆友:JProgressBar控件。控件们自然是要作为成员变量创建对象的,此外还要有File型成员变量来代表选中的文件夹。
这个实例只涉及了一个控件的事件,那就是选择文件夹按钮。在它的事件里,选择文件夹及列出信息神马的都是老生常谈了,关键是JProgressBar控件的用法。在用户选择文件夹后,使用JProgressBar控件的setIndeterminate(true)方法设置滚动条开始滚动;在文件信息显示完毕后,再通过JProgressBar控件的setIndeterminate(false)方法停止滚动条的滚动。
代码如下:


代码如下:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.UIManager;

public class FileListFrame extends JFrame {

/**
     *
     */
    private static final long serialVersionUID = -615665572894071265L;
    private JPanel contentPane;
    private JTextField chooseTextField;
    private JButton chooseButton;
    private JScrollPane scrollPane;
    private JTable table;
    private JProgressBar progressBar;
    private File chooseFile;

/**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FileListFrame frame = new FileListFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

/**
     * Create the frame.
     */
    public FileListFrame() {
        setTitle("\u7A97\u4F53\u52A8\u6001\u52A0\u8F7D\u78C1\u76D8\u6587\u4EF6");
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowActivated(WindowEvent arg0) {
                do_this_windowActivated(arg0);
            }
        });
        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 BorderLayout(0, 0));

JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);

chooseTextField = new JTextField();
        panel.add(chooseTextField);
        chooseTextField.setColumns(13);

chooseButton = new JButton("\u9009\u62E9\u6587\u4EF6\u5939");
        chooseButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                do_chooseButton_actionPerformed(arg0);
            }
        });
        panel.add(chooseButton);

progressBar = new JProgressBar();
        panel.add(progressBar);

scrollPane = new JScrollPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);

table = new JTable();
        scrollPane.setViewportView(table);
    }

protected void do_chooseButton_actionPerformed(ActionEvent arg0) {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        fileChooser.setMultiSelectionEnabled(false);
        int result = fileChooser.showOpenDialog(this);
        if (result == JFileChooser.APPROVE_OPTION) {
            chooseFile = fileChooser.getSelectedFile();// 获得用户选择的文件夹
            chooseTextField.setText(chooseFile.getAbsolutePath());// 显示用户选择的文件夹
            progressBar.setIndeterminate(true);// 设置滚动条开始滚动
            final File[] subFiles = chooseFile.listFiles();// 获得用户选择的文件夹中的所有文件(夹)
            final DefaultTableModel model = (DefaultTableModel) table.getModel();
            model.setRowCount(0);// 清空表格
            new Thread() {// 开始新的线程
                public void run() {
                    for (int i = 0; i < subFiles.length; i++) {// 遍历用户选择的文件夹
                        if (subFiles[i].isFile()) {// 判断是否是一个文件
                            Object[] property = new Object[3];
                            property[0] = i + 1;// 保存序号
                            property[1] = subFiles[i].getName();// 保存文件名
                            property[2] = "";
                            if (subFiles[i].isHidden()) {// 判断是否是一个隐藏文件
                                property[2] = "隐藏文件";
                            }
                            model.addRow(property);// 向表格中添加记录
                            table.setModel(model);// 更新表格
                        }
                        try {
                            Thread.sleep(100);// 线程休眠0.1秒实现动态加载
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    progressBar.setIndeterminate(false);// 停止进度条滚动
                };
            }.start();

}
    }

protected void do_this_windowActivated(WindowEvent arg0) {
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.setColumnIdentifiers(new Object[] { "序号", "文件名", "属性" });
    }

}

效果如图:

(0)

相关推荐

  • Java反射之静态加载和动态加载的简单实例

    静态加载: package com.imooc.加载类; public class Office_Static { public static void main(String[] args) { //new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类 if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel

  • 详解Java动态加载数据库驱动

    问题背景 在同一套系统中,要支持连接访问各种流行的数据库,以及同一数据库的不同版本,例如,oracle9i.oracle10g.oracle11g.oracle12c.sqlserver2000.sqlserver2005.sqlserver2008.sqlserver2012等,其中就会碰到一些问题,就是不同的数据库,数据库驱动肯定不同,对于这个问题到好解决,只需要将相应的驱动加入即可:然而对于同种数据库,不同版本时,而且不同版本的数据库驱动不仅不兼容,同时存在还会出现冲突,例如,能满足sql

  • java 动态加载的实现代码

    java 动态加载的实现代码 Java动态加载类的意义和目的: Java动态加载类主要是为了不改变主程序代码,通过修改配置文件就可以操作不同的对象执行不同的功能.主要有利于系统的扩展,例如当我要改变一个功能,只需要做一个类,然后编写相应的功能,通过配置文件就可以使用新的功能,不需要修改系统的任何地方,只需要添加一个类:充分实现了松散耦合.满足了开闭原则(对修改关闭,对添加或删除开放): public abstract class AbstractAction { public abstract

  • java 利用java反射机制动态加载类的简单实现

    如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

  • Java窗体动态加载磁盘文件的实现方法

    在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹.本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件:如果该文件是隐藏文件,就在属性栏中显示"隐藏文件".要用到进度条来表示是否完成. 思路如下: 首先是视图层.JTextField.JButton.JScrollPane.JTable神马的就不用再提了,都是老盆友了,在这里因为要用到进度条,所以会有一个新盆友:JProgressBar控件.控件们自然是要作为成员变量

  • 详解Java类动态加载和热替换

    前言 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次加载后,会长期留驻JVM,直到JVM退出.这个说法,是不是正确的? 2) 在开发的一个集成平台中,需要集成类似接口的多种工具,并且工具可能会有新增,同时在不同的环境部署会有裁剪(例如对外提供服务的应用,不能提供特定的采购的工具),如何才能更好地实现? 针对上面的第2点,我们采用Java插件化开发实现.上面的两个问题,都和Java的类加载和热替换机制有关. 1. Java的类加载器和双亲委派模

  • jquery及js实现动态加载js文件的方法

    本文实例讲述了jquery及js实现动态加载js文件的方法.分享给大家供大家参考,具体如下: 问题: 如果用jquery append直接加载script标签的话,会报错的.除了document.write外,还有没有其他的比较好的动态加载js文件的方法. 解决方法: 1.jquery方法 $.getScript("./test.js"); //加载js文件 $.getScript("./test.js",function(){ //加载test.js,成功后,并执

  • JS动态加载当前时间的方法

    本文实例讲述了JS动态加载当前时间的方法.分享给大家供大家参考.具体实现方法如下: <body bgcolor="#fef4d9" onload ="time()"> <script language="JavaScript"> function time () { var now = new Date(); var yr = now.getYear(); var mName = now.getMonth() + 1; v

  • JavaScript动态加载样式表的方法

    本文实例讲述了JavaScript动态加载样式表的方法.分享给大家供大家参考.具体如下: 如果需要更换皮肤,我们可以通过JS代码动态加载皮肤的样式表,下面的代码就可以做到,非常简单,你只需要把这段代码做成函数动态调用即可. var el = document.createElement('link'); el.rel = 'stylesheet'; el.type = 'text/css'; el.href = 'http://www.jb51.net/...' + 'styles.css';

  • jquery动态加载js三种方法实例

    复制代码 代码如下: <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="

  • Echarts教程之通过Ajax实现动态加载折线图的方法

    一.GIF图 二.前台代码 // 调用方法 hotlineLine(); // 定时刷新 setInterval(function () { hotlineLine(); },5000); function hotlineLine(){ // 初始化图表元素 var hotlineLine = echarts.init(document.getElementById('hotlineLine_id')); $.get('${pageContext.request.getContextPath()

  • AJAX和jQuery动态加载数据的实现方法

    什么是AJAX? 这里的AJAX不是希腊神话里的英雄,也不是清洁剂品牌,更不是一门语言,而是指异步Javascript和XML(Asynchronous JavaScript And XML),这里的XML(数据格式)也可以是纯文本(Plain Text)或是JSON.简单的说,就是使用XMLHttpRequest对象和服务器端交换数据(以XML或是JSON等格式),使用JavaScript处理数据并更新页面内容. 为什么要使用AJAX? 借助AJAX,我们可以实现: 在不重载页面的情况下,向服

  • 动态加载jquery库的方法

    有时候,我们可能不会在网页中<script src="jquery.min.js" 来加载 Jquery 库,可能在用户点击某个按钮后,才去加载 Jquery 库.好处不用我说,节省带宽,提高访问速度,因为用户可能不会点击这个按钮,也就不需要 Jquery .那么如何动态加载 Jquery 库呢?一般可以用 Document.write 来打印出,也可以用 Ajax ,也可以用我下面的这种方式: 复制代码 代码如下: <!DOCTYPE html PUBLIC "

  • jquery动态加载js/css文件方法(自写小函数)

    先来看jquery自带的getSrcript文件 方法 $.getScript(url,callback) 实例 复制代码 代码如下: var testVar = 'New JS loaded!'; alert(testVar); function newFun(dynParam) { alert('You just passed '+dynParam+ ' as parameter.'); } 动态调用方法 复制代码 代码如下: <script type="text/javascript

随机推荐