Анализ идеи:
Поскольку должна быть как операционная панель, так и панель прогресса, должны появляться две формы, которые наследуют класс JFrame.
Сначала посмотрите на призванную форму прогресса. Из -за операций файлов дизайна необходимо поймать исключения. Сначала создайте файл объект на основе файла, который будет скопирован, и создайте объект файла на основе сохраненного адреса копируемого файла, затем создайте объект FileOutputStream, затем создайте объект FileInputStream, а затем объект ProgressMonitorInputStream, а затем прочитайте Файл. Затем определите массив байтов, затем используйте цикл Whod для чтения файла, используйте метод writeOutputPutStream для записи данных через потоко. Наконец, используйте метод Close () класса ProgressMonitorInputStream для закрытия входного потока. Можно видеть, что этот метод требует трех параметров: его родительское окно появляется, адреса для копирования файла, и папку для копирования.
Код заключается в следующем:
ProgressMonitortest.java:
Кода -копия выглядит следующим образом:
Пакет cn.edu.xidian.crytoll;
импортировать java.io.fileinputstream;
импортировать java.io.*;
импортировать javax.swing.jframe;
импортировать javax.swing.progressmonitorinputstream;
открытый класс ProgressMonitorTest {
public void useProgressmonitor (jframe frame, string copypath, string newpath) {
пытаться {
File file = new File (copypath);
File newfile = new File (newpath);
FileOutputStream fop = new FileOutputStream (newFile);
InputStream in = new FileInputStream (File);
// Читать файл.
ProgressMonitorInputStream PM = новый ProgressMonitorInputStream (
кадр, "Чтение файлов, пожалуйста, подождите ...", в);
int c = 0;
Byte [] Bytes = новый байт [1024];
while ((c = pm.read (bytes))! = -1) {// цикл, чтобы прочитать файл
fop.write (байты, 0, c);
}
fop.close ();
pm.close ();
} catch (Exception ex) {
ex.printstacktrace ();
}
}
}
3. Посмотрите на основную форму снова. Само собой разумеется, что Jlabel и JTextfield - это две кнопки, выбирающие файлы и выбор папок, также являются обычными. Новый поток. Его дядя.
4. В конкретном методе запуска кнопки копирования сначала создайте объект потока в виде нового потока, затем вызовите метод start () объекта, перегружайте метод run (), создайте объект панели прогресса в методе, используйте Метод 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.filenameeextensionfilter;
открытый класс usermonitorFrame расширяет jframe реализует runnable {
/**
*
*/
Частный статический последний длинный серийный режим = 8674569541853793419L;
Частный JPanel ContentPane;
Private JTextfield FileField;
Private Jtextfield SearchTextfield;
Частный JTextfield Replacetextfield;
Частный файл;
Private Jtextfield Textfield;
Private JTextField TextField_1;
/**
* Запустите приложение.
*/
public static void main (string [] args) {
EventQueue.invokelater (new Runnable () {
public void run () {
пытаться {
Usermonitorframe frame = new usermonitorframe ();
Frame.SetVisible (true);
} catch (Exception e) {
e.printstacktrace ();
}
}
});
}
/**
* Создать кадр.
*/
public usermonitorframe () {
setReSizable (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 button = new jbutton ("/u9009/u62e9/u6587/u4ef6");
button.addactionListener (new ActionListener () {
public void 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 () {
public void 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 () {
public void 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 option = chooser.showopendialog (это);
// Убедитесь, что пользователь нажимает кнопку «Открыть» вместо кнопки «Отмена»
if (option! = jfilechooser.approve_option)
возвращаться;
// Выбрать объект файла, выбранный пользователем
file = chooser.getSelectedFile ();
// Показать информацию о файле в текстовое поле
textfield.settext (file.tostring ());
}
защищенная void do_button_1_actionperformed (actionevent e) {
Jfilechooser chooser = new jfilechooser ();
chooser.setFileSelectionMode (jfilechooser.directories_only);
int option = chooser.showopendialog (это);
if (option! = jfilechooser.approve_option)
возвращаться;
file = chooser.getSelectedFile ();
textfield_1.settext (file.tostring ());
}
// Подтвердите кнопку копирования нажмите событие
Защищенная void do_copybutton_actionperformed (actionevent arg0) {
Thread Think = новый поток (это);
thread.start ();
}
// Использовать технологию многопоточного чтения для реализации операции чтения
@Override
public void run () {
ProgressMonitortest test = new ProgressMonitortest ();
String path = textfield.getText ();
String save = textfield_1.getText ();
test.useprogressmonitor (это, path, save+path.substring (path.lastindexof ("."), path.length ()));
}
}