เมื่อใช้ระบบปฏิบัติการกราฟิกอินเตอร์เฟสเมื่อเปิดโฟลเดอร์ระบบจะแสดงรายการไฟล์และโฟลเดอร์ย่อยทั้งหมดโดยอัตโนมัติภายใต้โฟลเดอร์ ตัวอย่างนี้ใช้ฟังก์ชั่นที่คล้ายกัน: ก่อนอื่นให้ผู้ใช้เลือกโฟลเดอร์และโปรแกรมจะแสดงรายการไฟล์ทั้งหมดภายใต้โฟลเดอร์แบบไดนามิก ใช้แถบความคืบหน้าเพื่อระบุว่าเสร็จสมบูรณ์หรือไม่
แนวคิดมีดังนี้:
ครั้งแรกคือเลเยอร์มุมมอง ไม่จำเป็นต้องพูดถึง Jtextfield, Jbutton, Jscrollpane และ Jtable การควบคุมตามธรรมชาติจำเป็นต้องสร้างวัตถุเป็นตัวแปรสมาชิกและนอกจากนี้จะต้องมีตัวแปรสมาชิกประเภทไฟล์เพื่อแสดงโฟลเดอร์ที่เลือก
อินสแตนซ์นี้เกี่ยวข้องกับเหตุการณ์ที่มีการควบคุมเดียวนั่นคือปุ่มเลือกโฟลเดอร์ ในเหตุการณ์ของมันเป็นเรื่องปกติที่จะเลือกโฟลเดอร์และข้อมูลรายการ หลังจากผู้ใช้เลือกโฟลเดอร์ให้ใช้วิธีการ setIndeterminate (จริง) ของการควบคุม JProgressBar เพื่อตั้งค่าแถบเลื่อนเพื่อเริ่มการเลื่อน เพื่อหยุดการเลื่อน
รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
นำเข้า Java.awt.BorderLayout;
นำเข้า java.awt.eventqueue;
นำเข้า java.awt.event.actionEvent;
นำเข้า java.awt.event.actionListener;
นำเข้า java.awt.event.windowadapter;
นำเข้า java.awt.event.windowevent;
นำเข้า Java.io.File;
นำเข้า Javax.swing.jbutton;
นำเข้า Javax.swing.jfilechooser;
นำเข้า Javax.swing.jframe;
นำเข้า Javax.swing.jpanel;
นำเข้า Javax.swing.jprogressbar;
นำเข้า Javax.swing.jscrollpane;
นำเข้า Javax.swing.jtable;
นำเข้า Javax.swing.jtextfield;
นำเข้า Javax.swing.border.emptyborder;
นำเข้า Javax.swing.table.defaultTableModel;
นำเข้า Javax.swing.uimanager;
FileListFrame ระดับสาธารณะขยาย JFrame {
-
-
-
ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = -615665572894071265L;
Private JPanel ContentPane;
ส่วนตัว Jtextfield Choosetextfield;
JBUTTON Private JBUTTON BUTTON;
Jscrollpane Private Jscrollpane;
โต๊ะ jtable ส่วนตัว;
Private JProgressBar ProgressBar;
ไฟล์ส่วนตัวเลือกไฟล์;
-
* เปิดแอปพลิเคชัน
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
พยายาม {
uimanager.setlookandfeel ("com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
} catch (throwable e) {
E.PrintStackTrace ();
-
Eventqueue.invokelater (ใหม่ runnable () {
โมฆะสาธารณะเรียกใช้ () {
พยายาม {
FileListFrame frame = new FileListFrame ();
frame.setVisible (จริง);
} catch (Exception e) {
E.PrintStackTrace ();
-
-
-
-
-
* สร้างเฟรม
-
Public FileListFrame () {
Settitle ("/U7A97/U4F53/U52A8/U6001/U52A0/U8F7D/U78C1/U76D8/U6587/U4EF6");
AddWindowListener (WindowAdapter ใหม่ () {
@Override
โมฆะสาธารณะ windowactivated (windowevent arg0) {
do_this_windowactivated (arg0);
-
-
SetDefaultCloseoperation (jframe.exit_on_close);
Setbounds (100, 100, 450, 300);
ContentPane = new JPanel ();
ContentPane.SetBorder (ใหม่ Border (5, 5, 5, 5));
SetContentPane (ContentPane);
ContentPane.SetLayout (BorderLayout ใหม่ (0, 0));
JPanel Panel = new JPanel ();
ContentPane.add (แผง, BorderLayout.north);
choosetextfield = new jtextfield ();
Panel.Add (Choosetextfield);
Choosetextfield.SetColumns (13);
เลือก BUTTON = ใหม่ JButton ("/U9009/U62E9/U6587/U4EF6/U5939");
เลือก BUTTON.ADDACTIONLISTENER (ใหม่ ActionListener () {
โมฆะสาธารณะ ActionPerformed (ActionEvent Arg0) {
DO_CHOOSEBUTTON_ACTIONPERFORMED (Arg0);
-
-
Panel.Add (เลือก BUTTON);
ProgressBar = new JProgressBar ();
Panel.Add (ProgressBar);
Scrollpane = new JScrollpane ();
ContentPane.add (Scrollpane, BorderLayout.Center);
table = new jtable ();
Scrollpane.SetViewPortView (ตาราง);
-
Void DO_CHOOSEBUTTON_ACTIONPERFORMED (ActionEvent Arg0) {
JFilechooser FileChooser = ใหม่ jfilechooser ();
FileChooser.SetFilesElectionMode (jfilechooser.directories_only);
FileChooser.SetMultiselectionEnabled (เท็จ);
int result = fileChooser.ShowOpendialog (นี่);
if (result == jfilechooser.approve_option) {
เลือก file = fileChooser.getSelectedFile (); // รับโฟลเดอร์ที่เลือกโดยผู้ใช้
choosetextfield.settext (เลือก File.getAbsolutePath ()); // แสดงโฟลเดอร์ที่เลือกโดยผู้ใช้
progressbar.setIndeterminate (จริง); // ตั้งค่าแถบเลื่อนเพื่อเริ่มการเลื่อน
ไฟล์สุดท้าย [] subfiles = soquilfile.listfiles (); // รับไฟล์ทั้งหมด (โฟลเดอร์) ในโฟลเดอร์ที่เลือกโดยผู้ใช้
final defaultTableModel model = (defaultTableModel) table.getModel ();
model.setrowcount (0); // ล้างตาราง
เธรดใหม่ () {// เริ่มเธรดใหม่
โมฆะสาธารณะเรียกใช้ () {
สำหรับ (int i = 0; i <subfiles.length; i ++) {// traverse โฟลเดอร์ที่เลือกโดยผู้ใช้
if (subfiles [i] .isfile ()) {// พิจารณาว่าเป็นไฟล์
วัตถุ [] คุณสมบัติ = วัตถุใหม่ [3];
คุณสมบัติ [0] = i + 1; // บันทึกหมายเลขซีเรียล
คุณสมบัติ [1] = subfiles [i] .getName (); // บันทึกชื่อไฟล์
คุณสมบัติ [2] = "";
if (subfiles [i] .ishidden ()) {// พิจารณาว่าเป็นไฟล์ที่ซ่อนอยู่
คุณสมบัติ [2] = "ไฟล์ที่ซ่อนอยู่";
-
model.addrow (คุณสมบัติ); // เพิ่มบันทึกลงในตาราง
table.setModel (รุ่น); // อัปเดตตาราง
-
พยายาม {
thread.sleep (100); // เธรดนอนหลับเป็นเวลา 0.1 วินาทีเพื่อให้ได้การโหลดแบบไดนามิก
} catch (interruptedException e) {
E.PrintStackTrace ();
-
-
progressbar.setindeterminate (เท็จ); // หยุดการเลื่อนแถบความคืบหน้า
-
}.เริ่ม();
-
-
void do_this_windowactivated (windowevent arg0) {
defaultTableModel model = (defaultTableModel) table.getModel ();
model.setColumnIdentifiers (วัตถุใหม่ [] {"หมายเลขซีเรียล", "ชื่อไฟล์", "คุณสมบัติ"});
-
-
เอฟเฟกต์แสดงในภาพ: