การวิเคราะห์ความคิด:
เนื่องจากต้องมีทั้งแผงการดำเนินการและแถบความคืบหน้าสองรูปแบบที่สืบทอดคลาส JFrame ต้องปรากฏขึ้น
ก่อนอื่นที่เรียกว่าแบบฟอร์มแถบความคืบหน้า เนื่องจากการดำเนินการไฟล์การออกแบบจึงต้องมีข้อยกเว้น ก่อนอื่นสร้างวัตถุไฟล์ตามไฟล์ที่จะคัดลอกและสร้างวัตถุไฟล์ตามที่อยู่ที่บันทึกไว้ของไฟล์ที่คัดลอกจากนั้นสร้างวัตถุ FileOutputStream จากนั้นสร้างวัตถุ FileInputStream ตามด้วยวัตถุ ProgressMonitorInputStream จากนั้นอ่าน ไฟล์ ถัดไปกำหนดอาร์เรย์ไบต์จากนั้นใช้ขณะที่ลูปเพื่ออ่านไฟล์ใช้วิธีการเขียน () ของคลาส FileOutputStream เพื่อเขียนข้อมูลผ่านสตรีมจากนั้นใช้วิธีปิด () ของคลาส FileOutputStream เพื่อปิดสตรีมเอาต์พุตและ ในที่สุดก็ใช้วิธีปิด () ของคลาส ProgressMonitorInputStream เพื่อปิดสตรีมอินพุต จะเห็นได้ว่าวิธีนี้ต้องใช้พารามิเตอร์สามพารามิเตอร์: หน้าต่างหลักปรากฏขึ้นที่อยู่ไฟล์ที่จะคัดลอกและโฟลเดอร์ที่จะคัดลอกไป
รหัสมีดังนี้:
ProgressMonitortest.java:
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ cn.edu.xidian.crytoll;
นำเข้า Java.io.FileInputStream;
นำเข้า Java.io.*;
นำเข้า Javax.swing.jframe;
นำเข้า Javax.swing.ProgressMonitorInputStream;
ระดับสาธารณะ ProgressMonitortest {
โมฆะสาธารณะ USEProgressMonitor (กรอบ JFrame, String copypath, String newPath) {
พยายาม {
ไฟล์ file = ไฟล์ใหม่ (copypath);
ไฟล์ newfile = ไฟล์ใหม่ (newpath); // สร้างวัตถุไฟล์ตามที่อยู่ที่บันทึกไว้ของไฟล์ที่คัดลอก
fileOutputStream fop = new fileOutputStream (newFile);
inputStream ใน = ใหม่ fileInputStream (ไฟล์);
// อ่านไฟล์
ProgressMonitorInputStream PM = ใหม่ ProgressMonitorInputStream (
เฟรม "การอ่านไฟล์โปรดรอ ... ", ใน);
int c = 0;
ไบต์ [] ไบต์ = ไบต์ใหม่ [1024];
ในขณะที่ ((c = pm.read (ไบต์))! = -1) {// loop เพื่ออ่านไฟล์
fop.write (ไบต์, 0, c);
-
fop.close ();
PM.Close ();
} catch (exception ex) {
Ex.PrintStackTrace ();
-
-
-
3. ดูรูปแบบหลักอีกครั้ง จำเป็นต้องพูด Jlabel และ Jtextfield เป็นสองปุ่มการเลือกไฟล์และการเลือกโฟลเดอร์เป็นเรื่องปกติเช่นกัน ใหม่ ลุงของเขา
4. ในวิธีการเฉพาะของการเริ่มต้นการคัดลอกให้สร้างวัตถุเธรดเป็นเธรดใหม่จากนั้นเรียกใช้วิธีการเริ่มต้น () ของวัตถุโดยใช้วิธีการเรียกใช้ () ให้สร้างวัตถุแท่งความคืบหน้าในวิธีการใช้ วิธีการ getText () ของคลาส Jtextfield จะได้รับที่อยู่ไฟล์ที่จะคัดลอกและเส้นทางที่จะคัดลอกไปแล้วเรียกใช้วิธีการในคลาส Bar Progress
รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ 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 ใช้งาน unnable {
-
-
-
Private Static Final Long Long Serialversionuid = 8674569541853793419L;
Private JPanel ContentPane;
private jtextfield filefield;
ส่วนตัว Jtextfield SearchTextfield;
ส่วนตัว jtextfield replacetextfield;
ไฟล์ไฟล์ส่วนตัว
Private Jtextfield Textfield;
ส่วนตัว Jtextfield textfield_1;
-
* เปิดแอปพลิเคชัน
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
Eventqueue.invokelater (ใหม่ runnable () {
โมฆะสาธารณะเรียกใช้ () {
พยายาม {
USERMONITORFRAME FRAME = ใหม่ USERMONITORFRAME ();
frame.setVisible (จริง);
} catch (Exception e) {
E.PrintStackTrace ();
-
-
-
-
-
* สร้างเฟรม
-
Public UserMonitorFrame () {
setResizable (เท็จ);
SetDefaultCloseoperation (jframe.exit_on_close);
Setbounds (100, 100, 501, 184);
Settitle ("ใช้แถบความคืบหน้าเมื่ออ่านไฟล์");
getContentPane (). setlayout (null);
ฉลาก jlabel = new Jlabel ("/U6587/U4EF6/U5730/U5740/UFF1A");
label.setBounds (10, 10, 70, 15);
getContentPane (). เพิ่ม (ฉลาก);
TextField = new JTextField ();
TextField.SetBounds (90, 7, 300, 21);
getContentPane (). เพิ่ม (ฟิลด์ข้อความ);
TextField.SetColumns (10);
ปุ่ม jbutton = new JButton ("/U9009/U62E9/U6587/U4EF6");
button.addactionListener (ใหม่ 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 (). เพิ่ม (label_1);
textfield_1 = new jtextfield ();
textfield_1.setbounds (90, 38, 300, 21);
getContentPane (). เพิ่ม (textfield_1);
textfield_1.SetColumns (10);
JButton button_1 = new JButton ("/U9009/U62E9/U5730/U5740");
button_1.addactionListener (ใหม่ actionListener () {
โมฆะสาธารณะ ActionPerformed (ActionEvent E) {
do_button_1_actionperformed (e);
-
-
button_1.setbounds (400, 39, 93, 23);
getContentPane (). เพิ่ม (button_1);
JButton button_2 = new JButton ("/U5F00/U59CB/U590D/U5236");
button_2.addactionListener (ใหม่ actionListener () {
โมฆะสาธารณะ ActionPerformed (ActionEvent E) {
do_copybutton_actionperformed (e);
-
-
button_2.setbounds (182, 69, 93, 23);
getContentPane (). เพิ่ม (button_2);
-
Void DO_BUTTON_ACTIONPERFORMED (ActionEvent E) {
jfilechooser chooser = ใหม่ jfilechooser ();
chooser.setFilesElectionMode (jfilechooser.files_only);
// แสดงกล่องโต้ตอบเปิดไฟล์
ตัวเลือก int = chooser.showopendialog (นี่);
// ตรวจสอบให้แน่ใจว่าผู้ใช้กดปุ่มเปิดแทนปุ่มยกเลิก
ถ้า (ตัวเลือก! = jfilechooser.approve_option)
กลับ;
// รับวัตถุไฟล์ที่ผู้ใช้เลือก
file = chooser.getSelectedFile ();
// แสดงข้อมูลไฟล์ไปยังกล่องข้อความ
textfield.settext (file.toString ());
-
Void DO_BUTTON_1_ACTIONPERFORMED (ActionEvent E) {
jfilechooser chooser = ใหม่ jfilechooser ();
chooser.setFilesElectionMode (jfilechooser.directories_only);
ตัวเลือก int = chooser.showopendialog (นี่);
ถ้า (ตัวเลือก! = jfilechooser.approve_option)
กลับ;
file = chooser.getSelectedFile ();
textfield_1.settext (file.toString ());
-
// ยืนยันปุ่มคัดลอกคลิกเหตุการณ์
void do_copybutton_actionperformed (ActionEvent Arg0) {
เธรดเธรด = เธรดใหม่ (นี่);
thread.start ();
-
// ใช้เทคโนโลยีมัลติเธรดเพื่อรับรู้การดำเนินการอ่าน
@Override
โมฆะสาธารณะเรียกใช้ () {
ProgressMonitortest Test = ใหม่ ProgressMonitortest ();
String Path = textField.getText ();
สตริงบันทึก = textfield_1.getText ();
test.useprogressMonitor (นี่, เส้นทาง, บันทึก+path.substring (path.lastindexof ("."), path.length ()));
-
-