عند استخدام نظام تشغيل الواجهة الرسومية ، عند فتح المجلد ، سيقوم النظام تلقائيًا بإدراج جميع الملفات والمجلدات الفرعية تحت المجلد. هذا المثال ينفذ وظيفة مماثلة: اسمح للمستخدم أولاً بتحديد المجلد ، وسيقوم البرنامج بإدراج جميع الملفات تحت المجلد ؛ استخدم شريط التقدم للإشارة إلى ما إذا كان قد اكتمل.
الفكرة هي كما يلي:
الأول هو طبقة العرض. ليست هناك حاجة إلى ذكر Jtextfield و Jbutton و JScrollpane و Jtable. تحتاج عناصر التحكم بشكل طبيعي إلى إنشاء كائنات كمتغيرات للأعضاء ، وبالإضافة إلى ذلك ، يجب أن يكون هناك متغيرات عضو من نوع الملف لتمثيل المجلد المحدد.
لا يتضمن هذا المثيل سوى حدث عنصر تحكم واحد ، أي زر SELECT. في أحداثها ، من الشائع اختيار المجلدات وإدراج المعلومات. بعد أن يختار المستخدم المجلد ، استخدم طريقة setIndeterMinate (True) لعنصر تحكم 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 {
/**
*
*/
استاتيكي خاص نهائي الطويل المسلسل = -615665572894071265L ؛
jpanel contentPane الخاص ؛
خاص JTextfield ChooSetextField ؛
jbutton الخاص اختيار button ؛
خاص JScrollpane Scrollpane ؛
طاولة jtable الخاصة ؛
Private JProgressBar ProgressBar ؛
ملف خاص اختر File ؛
/**
* إطلاق التطبيق.
*/
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
يحاول {
uimanager.setlookandfeel ("com.sun.java.swing.plaf.nimbus.nimbuslookandfeel") ؛
} catch (رمي e) {
E.PrintStackTrace () ؛
}
eventqueue.invokelater (New RunNable () {
تشغيل الفراغ العام () {
يحاول {
FileListFrame Frame = New FileListFrame () ؛
frame.setVisible (صحيح) ؛
} catch (استثناء e) {
E.PrintStackTrace () ؛
}
}
}) ؛
}
/**
* إنشاء الإطار.
*/
FileListFrame العام () {
Settitle ("/u7a97/u4f53/u52a8/u6001/u52a0/u8f7d/u78c1/u76d8/u6587/u4ef6") ؛
addwindowlistener (new WindowAdapter () {
@تجاوز
Windowsivated Windowsactivated (WindowEvent Arg0) {
do_this_windowActivated (Arg0) ؛
}
}) ؛
setDefaultCloseOperation (jframe.exit_on_close) ؛
setBounds (100 ، 100 ، 450 ، 300) ؛
contentPane = new JPanel () ؛
contentPane.setBorder (New FreexBorder (5 ، 5 ، 5 ، 5)) ؛
setContentPane (contentPane) ؛
contentPane.setLayout (New BorderLayout (0 ، 0)) ؛
JPanel Panel = New JPanel () ؛
contentPane.add (لوحة ، borderlayout.north) ؛
ChooSetextField = New JTextField () ؛
Panel.add (chooSetextField) ؛
chooSetextField.setColumns (13) ؛
اختر button = new jbutton ("/u9009/u62e9/u6587/u4ef6/u5939") ؛
اختر button.addActionListener (New ActionListener () {
public void actionperformed (ActionEvent Arg0) {
do_choosebutton_actionperformed (arg0) ؛
}
}) ؛
Panel.add (اختر button) ؛
ProgressBar = New JProgressBar () ؛
Pane.add (ProgressBar) ؛
scrollpane = new jscrollpane () ؛
ContentPane.add (Scrollpane ، borderlayout.center) ؛
الجدول = جديد JTable () ؛
scrollpane.setViewPortView (الجدول) ؛
}
void do_choosebutton_actionperformed (ActionEvent arg0) {
JfileChooser fileChooser = new JfileChooser () ؛
filechooser.setFilesElectionMode (JfileChoOser.Directories_only) ؛
filechooser.setMultIsElectionEndability (false) ؛
int النتيجة = filechooser.showopendialog (هذا) ؛
if (النتيجة == jfilechooser.approve_option) {
اختر file = filechooser.getSelectedFile () ؛ // الحصول على المجلد المحدد من قبل المستخدم
chooSetextfield.settext (اختيار file.getabsolutepath ()) ؛ // عرض المجلد المحدد من قبل المستخدم
ProgressBar.SetIndeterMinate (True) ؛ // اضبط شريط التمرير لبدء التمرير
الملف النهائي [] subfiles = اختيار file.listfiles () ؛ // الحصول على جميع الملفات (المجلدات) في المجلد المحدد من قبل المستخدم
نموذج defaultTableModel النهائي = (defaultTableModel) table.getModel () ؛
model.setRowCount (0) ؛ // مسح الجدول
موضوع جديد () {// ابدأ مؤشر ترابط جديد
تشغيل الفراغ العام () {
لـ (int i = 0 ؛ i <subfiles.length ؛ i ++) {// اجتياز المجلد المحدد من قبل المستخدم
if (subfiles [i] .isfile ()) {// حدد ما إذا كان ملف
الكائن [] الخاصية = كائن جديد [3] ؛
الخاصية [0] = i + 1 ؛ // احفظ الرقم التسلسلي
الخاصية [1] = subfiles [i] .getName () ؛ // حفظ اسم الملف
الخاصية [2] = "" ؛
إذا (subfiles [i] .ishidden ()) {// حدد ما إذا كان ملفًا مخفيًا
الخاصية [2] = "ملف Hidden" ؛
}
model.addrow (خاصية) ؛ // إضافة سجل إلى الجدول
table.setModel (نموذج) ؛ // تحديث الجدول
}
يحاول {
thread.sleep (100) ؛ // ينام الخيط لمدة 0.1 ثانية لتحقيق التحميل الديناميكي
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
}
}
ProgressBar.SetIndeterminate (خطأ) ؛ // وقف شريط التقدم التمرير
} ؛
}.يبدأ()؛
}
}
void void do_this_windowactivated (windowevent arg0) {
DefaultTableModel Model = (defaultTableModel) table.getModel () ؛
model.setColumnIdentifiers (كائن جديد [] {"الرقم التسلسلي" ، "اسم الملف" ، "الخصائص"}) ؛
}
}
يظهر التأثير في الصورة: