在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹。本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件;如果该文件是隐藏文件,就在属性栏中显示“隐藏文件”。要用到进度条来表示是否完成。
思路如下:
首先是视图层。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); &niXYY\
L
N/$yykb9 yb:/oOH
[\\Y^[JHK[XX
NOO\\[]\Z[]J[N`g9h/hyNK\
NOOXY\X]]Y
][\HY][XS[[[[H
Y][XS[[
HXK[[
N[[[[Y[YY\]Xn#Hlg)JNOO]Bb99if&B[YZZ[Z[[^][KNKMLLLYM
L
|