最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java窗體動態(tài)加載磁盤文件的實現(xiàn)方法

 更新時間:2014年03月01日 15:27:25   作者:  
這篇文章主要介紹了Java窗體動態(tài)加載磁盤文件的實現(xiàn)方法,需要的朋友可以參考下

在使用圖形界面操作系統(tǒng)時,當(dāng)打開一個文件夾系統(tǒng)會自動列出該文件夾下的所有文件及子文件夾。本實例實現(xiàn)了類似的功能:首先讓用戶選擇一個文件夾,程序會動態(tài)列出該文件夾下的所有文件;如果該文件是隱藏文件,就在屬性欄中顯示“隱藏文件”。要用到進度條來表示是否完成。

思路如下:

首先是視圖層。JTextField、JButton、JScrollPane、JTable神馬的就不用再提了,都是老盆友了,在這里因為要用到進度條,所以會有一個新盆友:JProgressBar控件??丶冏匀皇且鳛槌蓡T變量創(chuàng)建對象的,此外還要有File型成員變量來代表選中的文件夾。
這個實例只涉及了一個控件的事件,那就是選擇文件夾按鈕。在它的事件里,選擇文件夾及列出信息神馬的都是老生常談了,關(guān)鍵是JProgressBar控件的用法。在用戶選擇文件夾后,使用JProgressBar控件的setIndeterminate(true)方法設(shè)置滾動條開始滾動;在文件信息顯示完畢后,再通過JProgressBar控件的setIndeterminate(false)方法停止?jié)L動條的滾動。
代碼如下:

復(fù)制代碼 代碼如下:

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);// 設(shè)置滾動條開始滾動
            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秒實現(xiàn)動態(tài)加載
                        } 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[] { "序號", "文件名", "屬性" });
    }

}

效果如圖:

相關(guān)文章

  • Spring?Security自定義登錄頁面認(rèn)證過程常用配置

    Spring?Security自定義登錄頁面認(rèn)證過程常用配置

    這篇文章主要為大家介紹了Spring?Security自定義登錄頁面認(rèn)證過程常用配置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    這篇文章主要介紹了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • idea配置多環(huán)境啟動方式dev、test、prod

    idea配置多環(huán)境啟動方式dev、test、prod

    這篇文章主要介紹了idea配置多環(huán)境啟動方式dev、test、prod,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java面試高頻問題之RabbitMQ系列全面解析

    Java面試高頻問題之RabbitMQ系列全面解析

    在介紹RabbitMQ之前實現(xiàn)要介紹一下MQ,MQ是什么?MQ全稱是Message Queue,可以理解為消息隊列的意思,簡單來說就是消息以管道的方式進行傳遞。RabbitMQ是一個實現(xiàn)了AMQP(Advanced Message Queuing Protocol)高級消息隊列協(xié)議的消息隊列服務(wù),用Erlang語言的
    2021-11-11
  • SpringBoot啟動失敗的原因及其解決方法

    SpringBoot啟動失敗的原因及其解決方法

    對于springboot的啟動失敗,相信大家都有經(jīng)歷,但是為什么會啟動失敗,以及怎么解決都只能通過日志進行查看,在這里,我會將常見的springboot啟動失敗的報錯一一展示,需要的朋友可以參考下
    2024-06-06
  • 基于@RequestParam與@RequestBody使用對比

    基于@RequestParam與@RequestBody使用對比

    這篇文章主要介紹了@RequestParam與@RequestBody的使用對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中駝峰命名與下劃線命名相互轉(zhuǎn)換

    Java中駝峰命名與下劃線命名相互轉(zhuǎn)換

    這篇文章主要介紹了Java中駝峰命名與下劃線命名相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法

    SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法

    這篇文章主要介紹了SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法,Spring對數(shù)據(jù)庫的操作在jdbc上s面做了深層次的封裝,使用spring的注入功能,可以把DataSource注冊到JdbcTemplate之中。下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-02-02
  • Spring底層事務(wù)原理解析

    Spring底層事務(wù)原理解析

    Spring事務(wù)有可能會提交,回滾、掛起、恢復(fù),所以Spring事務(wù)提供了一種機制,可以讓程序員來監(jiān)聽當(dāng)前Spring事務(wù)所處于的狀態(tài),這篇文章主要介紹了Spring底層事務(wù)原理,需要的朋友可以參考下
    2022-12-12
  • Spring Boot使用AOP防止重復(fù)提交的方法示例

    Spring Boot使用AOP防止重復(fù)提交的方法示例

    這篇文章主要介紹了Spring Boot使用AOP防止重復(fù)提交的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論

蓬安县| 伊宁市| 长海县| 吴桥县| 竹溪县| 玉门市| 建德市| 九龙城区| 木里| 青河县| 小金县| 南阳市| 漠河县| 泌阳县| 全椒县| 四会市| 防城港市| 平凉市| 乐亭县| 宝清县| 石首市| 叶城县| 驻马店市| 灵武市| 宁远县| 台中市| 汨罗市| 电白县| 成武县| 重庆市| 乐昌市| 商丘市| 正安县| 平江县| 辉南县| 科技| 琼中| 迁西县| 长垣县| 岚皋县| 张家川|