Analisis Ide:
Karena harus ada panel operasi dan bilah kemajuan, dua bentuk yang mewarisi kelas JFrame harus muncul.
Pertama -tama lihat formulir Progress Bar. Karena operasi file desain, pengecualian perlu ditangkap. Pertama -tama buat objek file berdasarkan file yang akan disalin, dan buat objek file berdasarkan alamat yang disimpan dari file yang disalin, kemudian buat objek FileOutputStream, kemudian buat objek FileInputStream, diikuti oleh Objek ProgressMonitInputStream, dan kemudian baca File. Jika total waktu memakan waktu lebih dari 2 detik, jendela pemantauan kemajuan akan secara otomatis muncul. Selanjutnya, tentukan array byte, lalu gunakan loop while untuk membaca file, gunakan metode write () dari kelas fileOutputStream untuk menulis data melalui aliran, kemudian gunakan metode close () dari kelas fileoutputStream untuk menutup aliran output, dan Akhirnya gunakan metode close () dari kelas progressMonitorInputStream untuk menutup aliran input. Dapat dilihat bahwa metode ini membutuhkan tiga parameter: jendela induknya muncul, alamat file yang akan disalin, dan folder yang akan disalin.
Kodenya adalah sebagai berikut:
ProgressMonitortest.java:
Salinan kode adalah sebagai berikut:
paket cn.edu.xidian.crytoll;
impor java.io.fileInputStream;
impor java.io.*;
impor javax.swing.jframe;
impor javax.swing.progressmonitorInputStream;
Kelas Publik ProgressMonitortest {
public void useProgressMonitor (bingkai jframe, string copypath, string newPath) {
mencoba {
File File = File Baru (CopyPath);
File newfile = file baru (newPath);
FileOutputStream fop = new FileOutputStream (newFile);
InputStream in = new FileInputStream (file);
// Baca file.
ProgressMonitorInputStream PM = ProgressMonitorInputStream baru (
bingkai, "Membaca File, Harap Tunggu ...", di);
int c = 0;
byte [] bytes = byte baru [1024];
while ((c = pm.read (bytes))! = -1) {// loop untuk membaca file
fop.write (bytes, 0, c);
}
fop.close ();
pm.close ();
} catch (Exception ex) {
Ex.PrintStackTrace ();
}
}
}
3. Lihatlah bentuk utama lagi. Tak perlu dikatakan, Jlabel dan JTextfield adalah dua tombol, memilih file dan memilih folder, juga umum. yang baru. Pamannya.
4. Dalam metode spesifik tombol start copy, pertama -tama buat objek utas sebagai utas baru, lalu panggil metode start () dari objek, kelebihan metode run (), buat objek batang progress dalam metode, gunakan Metode getText () dari kelas JTextField membuat alamat file disalin dan jalur yang harus disalin, dan kemudian memanggil metode di kelas bilah progres.
Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
paket cn.edu.xidian.crytoll;
impor java.awt.borderlayout;
impor java.awt.desktop;
impor java.awt.dimension;
impor java.awt.eventqueue;
impor java.awt.gridbagconstraints;
impor java.awt.gridbaglayout;
impor java.awt.insets;
impor java.awt.event.actionevent;
impor java.awt.event.actionlistener;
impor java.io.file;
impor java.io.filenotfoundException;
impor java.io.filereader;
impor java.io.filewriter;
impor java.io.ioException;
impor javax.swing.jbutton;
impor javax.swing.jfilechooser;
impor javax.swing.jframe;
impor javax.swing.jlabel;
impor javax.swing.joptionpane;
impor javax.swing.jpanel;
impor javax.swing.jtextfield;
impor javax.swing.border.emptyborder;
impor javax.swing.filechooser.filenameextensionfilter;
Kelas Publik UsermonitorFrame Memperluas JFrame Implement Runnable {
/**
*
*/
SerialVersionuid panjang final statis pribadi = 8674569541853793419L;
ContentPane Jpanel Pribadi;
Private JTextfield Filefield;
Private JTextField SearchTextfield;
Private JTextField Replacetextfield;
file file pribadi;
Private JTextfield Textfield;
Private JTextField Textfield_1;
/**
* Luncurkan aplikasi.
*/
public static void main (string [] args) {
Eventqueue.invokelater (runnable baru () {
public void run () {
mencoba {
Bingkai userMonitorFrame = USermonitorFrame baru ();
frame.setVisible (true);
} catch (Exception e) {
e.printstacktrace ();
}
}
});
}
/**
* Buat bingkai.
*/
UsermonitorFrame publik () {
setResizable (false);
setDefaultCloseOperation (jframe.exit_on_close);
setbounds (100, 100, 501, 184);
settitle ("Gunakan bilah progres saat membaca file");
getContentPane (). setLayout (null);
Label jlabel = jlabel baru ("/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);
Tombol jbutton = jbutton baru ("/u9009/u62e9/u6587/u4ef6");
Button.AddActionListener (ActionListener baru () {
public void actionPerformed (actionEvent e) {
do_button_actionperformed (e);
}
});
Button.setbounds (400, 6, 93, 23);
getContentPane (). Tambah (tombol);
Jlabel label_1 = jlabel baru ("/u590d/u5236/u5730/u5740/uff1a");
label_1.setbounds (10, 40, 70, 15);
getContentPane (). Add (label_1);
textfield_1 = jTextField baru ();
textfield_1.setbounds (90, 38, 300, 21);
getContentPane (). Add (TextField_1);
textfield_1.setColumns (10);
Jbutton button_1 = jbutton baru ("/u9009/u62e9/u5730/u5740");
Button_1.addactionListener (ActionListener baru () {
public void actionPerformed (actionEvent e) {
do_button_1_actionperformed (e);
}
});
tombol_1.setbounds (400, 39, 93, 23);
getContentPane (). Tambah (tombol_1);
Jbutton button_2 = jbutton baru ("/u5f00/u59cb/u590d/u5236");
Button_2.addactionListener (ActionListener baru () {
public void actionPerformed (actionEvent e) {
do_copybutton_actionperformed (e);
}
});
tombol_2.setbounds (182, 69, 93, 23);
getContentPane (). Tambah (tombol_2);
}
void do_button_actionperformed (actionEvent e) {{ActionEvent E) {
JFilechooser chooser = jFilechooser baru ();
chooser.setFilesElectionMode (jfilechooser.files_only);
// Tampilkan kotak dialog pembukaan file
Int option = chooser.showopendialog (ini);
// Pastikan pengguna menekan tombol buka alih -alih tombol batal
if (opsi! = jFilechooser.approve_option)
kembali;
// Dapatkan objek file yang dipilih oleh pengguna
file = chooser.getSelectedFile ();
// Tampilkan informasi file ke kotak teks
textfield.setText (file.toString ());
}
void do_button_1_actionperformed (actionEvent e) {{{{{{{
JFilechooser chooser = jFilechooser baru ();
chooser.setFilesElectionMode (jfilechooser.directories_only);
Int option = chooser.showopendialog (ini);
if (opsi! = jFilechooser.approve_option)
kembali;
file = chooser.getSelectedFile ();
textfield_1.settext (file.toString ());
}
// Konfirmasi acara Salin Klik Tombol
void do_copybutton_actionperformed (actionEvent arg0) {
Thread utas = utas baru (ini);
thread.start ();
}
// Gunakan teknologi multi-threading untuk mewujudkan operasi baca
@Mengesampingkan
public void run () {
ProgressMonitortest test = new ProgressMonitortest ();
String path = textfield.getText ();
String save = textfield_1.getText ();
test.useprogressMonitor (this, path, save+path.substring (path.LastIndexOf ("."), path.length ()));
}
}