2010-02-17 8 views
0

J'ai écrit une application simple et je veux montrer le retard de cela avec JProgressBar Plese m'aider;Comment montrer mon retard de l'application avec JProgressBar?

Je veux montrer JProgressBar avec JOptionPane, avec un bouton d'annulation et il devrait être modal

ceci est mon code source:

class CustomFrame extends JFrame { 

    private JProgressBar progressBar; 

    public CustomFrame() { 
    long start = System.currentTimeMillis(); 
    myMethod(); 
    this.getContentPane().setLayout(null); 
    this.setSize(200, 200); 

    //JOptionPane. ????? 

    this.setTitle("JFrame"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true); 
     long end = System.currentTimeMillis(); 
     System.out.print("\nTime: " + (end - start)); 
    } 
    public void myMethod(){ 
     try { 
        java.io.File file = new java.io.File("i://m.txt"); 
        BufferedReader input = 
         new BufferedReader(new FileReader(file)); 
        String line; 
        while ((line = input.readLine()) != null) { 
         if (line.indexOf("CREATE KGCGI=") != -1){ 
          System.out.println(line); 
         } 
        } 
        input.close(); 
        } 
        catch(Exception e){ 
         e.printStackTrace(); 
        } 
    } 

Merci ...

Répondre

3

Il y a deux choses que vous devrez faire pour que cela fonctionne:

  1. Vous devez être conscient des problèmes de threads à Swing. Votre peinture GUI doit être effectuée sur EventDispatchThread et les E/S disque doivent être effectuées dans un thread de travail. Voir this tutorial, le SwingWorker JavaDoc et SwingUtilities.invokeLater pour plus de détails
  2. Vous souhaitez ensuite obtenir la taille de votre fichier (file.length()) afin de déterminer comment la portée de votre barre de progression (myProgressBar.setMaximum(length))
  3. Lorsque vous itérer sur les lignes dans votre fichier, vous voulez déclencher une mise à jour de votre barre de progression (myProgressBar.setValue(myProgressBar.getValue()+lineLength)).

A couple de points par voie de critique:

  • votre constructeur ne devrait pas partir et faire tout votre travail (c.-à-charger votre fichier et affiche une fenêtre d'option avec la possibilité d'annuler. le constructeur doit simplement faire le travail nécessaire pour créer l'objet, vous pouvez envisager d'avoir votre constructeur créer votre classe, et ensuite avoir le travail qui doit être fait pour être appelé séparément, ou dans quelque chose comme une méthode init()
  • Il n'est pas clair ce que vous faites avec la JFrame en tant que superclasse JOptionPane i s une classe qui fera apparaître une boîte de dialogue modale très basique avec du texte, peut-être une icône ou un champ de saisie. Ce n'est pas un panneau intégré dans une boîte de dialogue.
  • Comme JOptionPane est une construction très basique pour créer une boîte de dialogue de base, il peut être plus facile d'utiliser un JDialog, qui peut également être rendu modal. JDialog vous permettra d'ajouter des boutons à votre guise, où JOptionPane autonome nécessitera que vous utilisiez Oui/Non, ou Oui/Non/Annuler ou OK/Annuler etc.
  • Si vous voulez toujours utiliser JOptionPane, et seulement affiche un bouton d'annulation, vous pouvez instancier un JOptionPane (par opposition à l'utilisation de l'utilitaire show* méthodes), avec la barre de progression comme message, et le JOptionPane.CANCEL_OPTION comme paramètre optionType. Vous devrez toujours mettre ceci dans un JDialog pour le rendre visible. Voir this tutorial pour plus de détails:

JOptionPane (constructeur)

Crée un JOptionPane avec les boutons spécifiés, icônes, le message, le titre, et ainsi de suite. Vous devez ensuite ajouter le volet d'options à un JDialog, enregistrer un écouteur de modification de propriété dans le volet d'options et afficher la boîte de dialogue. Voir Arrêt de la fermeture automatique du dialogue pour plus de détails.