Analyse des idées:
Parce qu'il doit y avoir à la fois un panneau d'opération et une barre de progression, deux formulaires qui héritent de la classe JFrame doivent apparaître.
Regardez d'abord le formulaire de barre de progression. En raison des opérations de fichiers de conception, les exceptions doivent être capturées. Créez d'abord un objet de fichier basé sur le fichier à copier, et créez un objet de fichier en fonction de l'adresse enregistrée du fichier copié, puis créez un objet FileOutputStream, puis créez un objet FileInputStream, suivi d'un objet ProgressPonitorInputStream, puis lisez l'objet fichier. Ensuite, définissez le tableau d'octets, puis utilisez la boucle while pour lire le fichier, utilisez la méthode écrite () de la classe FileOutputStream pour écrire des données via le flux, puis utilisez la méthode close () de la classe FileOutputStream pour fermer le flux de sortie et Enfin, utilisez la méthode Close () de la classe ProgressPonitorInputStream pour fermer le flux d'entrée. On peut voir que cette méthode nécessite trois paramètres: sa fenêtre parent apparaît, l'adresse de fichier à copier et le dossier à copier.
Le code est le suivant:
ProgressPonitortest.java:
La copie de code est la suivante:
package cn.edu.xidian.crytoll;
import java.io.fileInputStream;
importer java.io. *;
import javax.swing.jframe;
Importer javax.swing.progressMonitorInputStream;
classe publique ProgressMonitorTest {
public void useProgressMonitor (JFrame Frame, String copypath, String newpath) {
essayer {
Fichier file = nouveau fichier (copypath);
Fichier newFile = nouveau fichier (newPath);
FileOutputStream fop = new FileOutputStream (newFile);
InputStream dans = new FileInputStream (fichier);
// Lire le fichier.
PROGRESSIONNORIRINPUTSTREAM PM = NOUVEAU PROGRADMONITERInputStream (
Frame, "Fichier Reading, veuillez patienter ...", IN);
int c = 0;
octet [] octets = nouveau octet [1024];
while ((c = pm.read (octets))! = -1) {// boucle pour lire le fichier
fop.write (octets, 0, c);
}
fop.close ();
pm.close ();
} catch (exception ex) {
ex.printStackTrace ();
}
}
}
3. Regardez à nouveau le formulaire principal. Inutile de dire que JLabel et JTextfield sont les deux boutons, la sélection des fichiers et la sélection des dossiers, sont également courants. Nouveau thread. Son oncle.
4. Dans la méthode spécifique de démarrage du bouton de copie, créez d'abord un objet de thread comme nouveau thread, puis appelez la méthode start () de l'objet, surchargez la méthode run (), créez un objet de barre de progression dans la méthode, utilisez le La méthode getText () de la classe JTextField obtient l'adresse du fichier à copier et le chemin à copier, puis appelle la méthode dans la classe de barre de progression.
Le code est le suivant:
La copie de code est la suivante:
package cn.edu.xidian.crytoll;
import java.awt.borderLayout;
import java.awt.desktop;
import java.awt.dimension;
import java.awt.eventqueue;
Importer java.awt.gridbagConstraints;
import java.awt.gridbaglayout;
Importer java.awt.insets;
import java.awt.event.actionEvent;
import java.awt.event.actionListener;
Importer java.io.file;
import java.io.filenotfoundException;
import java.io.fileReader;
import java.io.filewriter;
Importer java.io.ioException;
import javax.swing.jbutton;
import javax.swing.jfilechooser;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.joptionpane;
import javax.swing.jpanel;
import javax.swing.jtextfield;
Importer Javax.swing.border.emptyborder;
import javax.swing.filechooser.filenameExtensionFilter;
classe publique UserMonitorFrame étend JFrame implémente Runnable {
/ **
*
* /
Final statique privé long SerialVersionUID = 8674569541853793419L;
JPANEL privé ContentPane;
JEXTFIELD PRIVÉ FILEFIELD;
JEXTFIELD JETTHFIELD PRIVÉ;
Jtextfield privé RemplaceTextfield;
fichier privé;
Jtexfield privé Textfield;
privé jTextField TextField_1;
/ **
* Lancez l'application.
* /
public static void main (String [] args) {
EventQueue.invokelater (new Runnable () {
public void run () {
essayer {
Usermonitorframe frame = new UserMonitorFrame ();
frame.setVisible (true);
} catch (exception e) {
e.printStackTrace ();
}
}
});
}
/ **
* Créez le cadre.
* /
public usermonitorframe () {
setResizable (false);
setDefaultCloseOperation (jframe.exit_on_close);
Setbounds (100, 100, 501, 184);
setTitle ("Utiliser la barre de progression lors de la lecture d'un fichier");
getContentPane (). setLayout (null);
JLABEL Label = new JLabel ("/ U6587 / U4EF6 / U5730 / U5740 / UFF1A");
Label.SetBounds (10, 10, 70, 15);
getContentPane (). Add (étiquette);
TextField = new JTextField ();
TextField.SetBounds (90, 7, 300, 21);
getContentPane (). Add (TextField);
TextField.SetColumns (10);
Button jbutton = 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 (). Add (bouton);
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_ACTIONAGEFORMED (E);
}
});
Button_2.SetBounds (182, 69, 93, 23);
getContentPane (). Add (Button_2);
}
protégé void do_button_actionperformed (actionevent e) {
JFileChoOSer Chooser = new JFileChoOser ();
choOser.setFilesElelectionMode (jFileChoOser.Files_only);
// Afficher la boîte de dialogue d'ouverture des fichiers
int option = choOser.showOpenDialog (this);
// Assurez-vous que l'utilisateur appuie sur le bouton Ouvrir au lieu du bouton Annuler
if (option! = jFileChoOser.Approve_Option)
retour;
// obtient l'objet de fichier sélectionné par l'utilisateur
file = choOser.getSelectedFile ();
// Afficher les informations de fichier dans la zone de texte
TextField.SeTText (file.toString ());
}
protégé void do_button_1_actionperformed (ActionEvent e) {
JFileChoOSer Chooser = new JFileChoOser ();
choOser.setFileSelectionMode (jFileChooser.Directories_Only);
int option = choOser.showOpenDialog (this);
if (option! = jFileChoOser.Approve_Option)
retour;
file = choOser.getSelectedFile ();
TextField_1.seTTExt (file.toString ());
}
// Confirmez l'événement de clic du bouton de copie
protégé void DO_COPYBUTTON_ACTIONGETFORMED (ActionEvent Arg0) {
Thread thread = nouveau thread (this);
thread.start ();
}
// Utilisez une technologie multi-lancement pour réaliser un opération de lecture
@Outrepasser
public void run () {
ProgressMonitorTest Test = new ProgressMonitOrest ();
String path = textfield.getText ();
String Save = TextField_1.getText ();
test.USEPROGRESSMONITER (This, Path, Save + Path.SubString (path.LastIndexof ("."), path.length ()));
}
}