تحليل الأفكار:
لأنه يجب أن يكون هناك لوحة تشغيل وشريط تقدم ، يجب أن يظهر نموذجان يرثون فئة JFrame.
انظر أولاً إلى نموذج شريط التقدم. بسبب عمليات ملفات التصميم ، يجب اكتشاف الاستثناءات. قم أولاً بإنشاء كائن ملف استنادًا إلى الملف المراد نسخه ، وإنشاء كائن ملف بناءً ملف. بعد ذلك ، حدد صفيف البايت ، ثم استخدم حلقة "There" لقراءة الملف ، واستخدم طريقة الكتابة () لفئة FileOutputStream لكتابة البيانات من خلال الدفق ، ثم استخدم طريقة FileOutputStream لإغلاق دفق الإخراج ، ودفق الإخراج ، و أخيرًا ، استخدم طريقة Close () لفئة ProgressMonitorInputStream لإغلاق دفق الإدخال. يمكن ملاحظة أن هذه الطريقة تتطلب ثلاث معلمات: تنبثق النافذة الأم الخاصة بها ، وعنوان الملف الذي سيتم نسخه ، ويتم نسخ المجلد إليه.
الرمز كما يلي:
ProgressMonitortest.java:
نسخة الكود كما يلي:
حزمة cn.edu.xidian.crytoll ؛
استيراد java.io.fileInputStream ؛
استيراد java.io.*؛
استيراد javax.swing.jframe ؛
استيراد javax.swing.progressMonitorInputStream ؛
الطبقة العامة تقدم {
public void useprogressMonitor (Jframe Frame ، String copypath ، String NewPath) {
يحاول {
ملف ملف = ملف جديد (copypath) ؛
ملف NewFile = NewPath) ؛
FileOutputStream FOP = جديد fileOutputStream (NEWFILE) ؛
inputStream in = new FileInputStream (file) ؛
// اقرأ الملف.
ProgressMonitorInputStream PM = New ProgressMonitorInputStream (
الإطار ، "قراءة الملف ، يرجى الانتظار ..." ، في) ؛
int c = 0 ؛
بايت [] بايت = بايت جديد [1024] ؛
بينما ((c = pm.read (bytes))! = -1) {// loop لقراءة الملف
fop.write (بايت ، 0 ، ج)
}
fop.close () ؛
PM.Close ()
} catch (استثناء ex) {
ex.printStackTrace () ؛
}
}
}
3. انظر إلى النموذج الرئيسي مرة أخرى. وغني عن القول ، إن JLabel و JTextfield هما الزران ، واختيار الملفات واختيار المجلدات ، شائعة أيضًا. جديد. عمه.
4. في الطريقة المحددة لشراء زر بدء نسخ ، قم أولاً بإنشاء كائن مؤشر ترابط كخيط جديد ، ثم اتصل بالطريقة start () للكائن ، أو overload the method () ، قم بإنشاء كائن شريط تقدم في الطريقة ، استخدم GetText () طريقة فئة JTextField تحصل على عنوان الملف المراد نسخه ومسار يتم نسخه ، ثم يستدعي الطريقة في فئة شريط التقدم.
الرمز كما يلي:
نسخة الكود كما يلي:
حزمة cn.edu.xidian.crytoll ؛
استيراد java.awt.borderlayout ؛
استيراد java.awt.desktop ؛
استيراد java.awt.dimension ؛
استيراد java.awt.eventqueue ؛
استيراد java.awt.gridbagconstraints ؛
استيراد java.awt.gridbaglayout ؛
استيراد java.awt.insets ؛
استيراد java.awt.event.actionevent ؛
استيراد java.awt.event.actionListener ؛
استيراد java.io.file ؛
استيراد java.io.filenotfoundException ؛
استيراد java.io.filereader ؛
استيراد java.io.filewriter ؛
استيراد java.io.ioException ؛
استيراد javax.swing.jbutton ؛
استيراد javax.swing.jfilechooser ؛
استيراد javax.swing.jframe ؛
استيراد javax.swing.jlabel ؛
استيراد javax.swing.joptionpane ؛
استيراد javax.swing.jpanel ؛
استيراد javax.swing.jtextfield ؛
استيراد javax.swing.border.emptyborder ؛
استيراد javax.swing.filechooser.filenameextensionfilter ؛
الطبقة العامة usermonitorFrame يمتد JFrame الأدوات Runnable {
/**
*
*/
استاتيكي خاص نهائي الطويل المسلسل = 8674569541853793419L ؛
jpanel contentPane الخاص ؛
Private Jtextfield Filefield ؛
خاص JTextField SearchTextField ؛
Private JTextfield Relacetextfield ؛
ملف الملف الخاص ؛
خاص JTextfield Textfield ؛
Private JTextField TextField_1 ؛
/**
* إطلاق التطبيق.
*/
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
eventqueue.invokelater (New RunNable () {
تشغيل الفراغ العام () {
يحاول {
usermonitorframe frame = new UserMonitorFrame () ؛
frame.setVisible (صحيح) ؛
} catch (استثناء e) {
E.PrintStackTrace () ؛
}
}
}) ؛
}
/**
* إنشاء الإطار.
*/
usermonitorframe العامة () {
setResible (false) ؛
setDefaultCloseOperation (jframe.exit_on_close) ؛
setBounds (100 ، 100 ، 501 ، 184) ؛
Settitle ("استخدم شريط التقدم عند قراءة ملف") ؛
getContentPane (). setLayout (null) ؛
JLabel Label = New JLabel ("/u6587/u4ef6/u5730/u5740/uff1a") ؛
label.setBounds (10 ، 10 ، 70 ، 15) ؛
getContentPane (). add (label) ؛
TextField = New JTextField () ؛
TextField.SetBounds (90 ، 7 ، 300 ، 21) ؛
getContentPane (). add (textfield) ؛
textfield.setColumns (10) ؛
زر Jbutton = New JButton ("/u9009/u62e9/u6587/u4ef6") ؛
button.addActionListener (New ActionListener () {
الفراغ العام actionperformed (Actionevent e) {
do_button_ActionPerformed (e) ؛
}
}) ؛
button.setBounds (400 ، 6 ، 93 ، 23) ؛
getContentPane (). إضافة (زر) ؛
JLabel Label_1 = New JLabel ("/u590d/u5236/u5730/u5740/uff1a") ؛
label_1.setBounds (10 ، 40 ، 70 ، 15) ؛
getContentPane (). add (label_1) ؛
TextField_1 = new JTextField () ؛
textfield_1.setBounds (90 ، 38 ، 300 ، 21) ؛
getContentPane (). add (textField_1) ؛
textfield_1.setColumns (10) ؛
jbutton button_1 = new jbutton ("/u9009/u62e9/u5730/u5740") ؛
button_1.addActionListener (new ActionListener () {
الفراغ العام actionperformed (Actionevent e) {
do_button_1_actionperformed (e) ؛
}
}) ؛
button_1.setBounds (400 ، 39 ، 93 ، 23) ؛
getContentPane (). add (button_1) ؛
jbutton button_2 = new jbutton ("/u5f00/u59cb/u590d/u5236") ؛
button_2.addActionListener (new ActionListener () {
الفراغ العام actionperformed (Actionevent e) {
do_copybutton_actionperformed (e) ؛
}
}) ؛
button_2.setBounds (182 ، 69 ، 93 ، 23) ؛
getContentPane (). add (button_2) ؛
}
void do_button_actionperformed (ActionEvent e) {
JFileChooser chooser = new JfileChooser () ؛
chooser.setFilesElectionMode (jfilechooser.files_only) ؛
// إظهار مربع الحوار فتح الملف
int خيار = choloSer.ShowOpendialog (هذا) ؛
// تأكد من أن المستخدم يضغط على الزر فتح بدلاً من الزر "إلغاء"
إذا (الخيار! = jfilechooser.approve_option)
يعود؛
// احصل على كائن الملف المحدد من قبل المستخدم
file = choloSer.getSelectedFile () ؛
// إظهار معلومات الملف إلى مربع النص
textfield.settext (file.toString ()) ؛
}
void do_button_1_actionperformed (ActionEvent e) {
JFileChooser chooser = new JfileChooser () ؛
chooser.setFilesElectionMode (jfilechooser.directories_only) ؛
int Option = choloSer.ShowOpendialog (هذا) ؛
إذا (الخيار! = jfilechooser.approve_option)
يعود؛
file = choloSer.getSelectedFile () ؛
textfield_1.settext (file.toString ()) ؛
}
// قم بتأكيد زر النسخ انقر فوق حدث
void do_copybutton_actionperformed (ActionEvent arg0) {
موضوع الموضوع = مؤشر ترابط جديد (هذا) ؛
thread.start () ؛
}
// استخدم تقنية متعددة الخيوط لتحقيق عملية القراءة
@تجاوز
تشغيل الفراغ العام () {
progressMonitortest اختبار = جديد progressMonitOrtest () ؛
String path = textfield.getText () ؛
سلسلة حفظ = textfield_1.getText () ؛
test.useprogressMonitor (هذا ، المسار ، حفظ+path.substring (path.lastindexof (".") ، path.length ())) ؛
}
}