Java表單動態載入磁碟檔案的實現方法_java

來源:互聯網
上載者:User

在使用圖形介面作業系統時,當開啟一個檔案夾系統會自動列出該檔案夾下的所有檔案及子檔案夾。本執行個體實現了類似的功能:首先讓使用者選擇一個檔案夾,程式會動態列出該檔案夾下的所有檔案;如果該檔案是隱藏檔案,就在屬性欄中顯示“隱藏檔案”。要用到進度條來表示是否完成。

思路如下:

首先是視圖層。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[] { "序號", "檔案名稱", "屬性" });
    }

}

效果如圖:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.