2009-02-04 7 views

Répondre

3

Vous ne pouvez pas. Créez votre propre boîte de dialogue à l'aide d'un JProgressBar, comme décrit dans The Java Tutorial.

+0

Oui, il est possible: http://stackoverflow.com/questions/2778045/how-to-omit-the-cancel-button-in-java-progressmonitor –

+0

@BarbeRouge cette réponse vous pointer sur indique la même chose que la mienne - vous ne pouvez pas utiliser ProgressMonitor, vous devez créer votre propre boîte de dialogue JProgressBar. La seule différence est qu'ils ont copié le code du tutoriel Java dans la réponse. –

0

La première question est pourquoi ne voulez-vous pas que l'utilisateur puisse annuler l'action? Si cela prend si longtemps, pourquoi ne devraient-ils pas être capables de décider qu'ils ne veulent pas l'attendre?

Si vous ne voulez vraiment pas le bouton d'annulation, vous devrez vous serrer les dents et créer votre propre boîte de dialogue de progression. Vous pouvez regarder la source ProgressMonitor pour voir comment ils le font (ils utilisent un JOptionPane pour la boîte de dialogue et passent un couple de Strings et JProgressBar).

3

Je ne sais pas pourquoi tous les champs ProgressMonitor sont privés. Probablement pas M. Godsling de création le plus fier :)

* @author James Gosling 
* @author Lynn Monsanto (accessibility) 
* @version 1.37 04/12/06 

clone Il suffit, avec quelques-uns paquet des choses privées de Swing, vous pouvez faire ce que vous voulez, comme ajouter un drapeau pour cancelability, et de l'utiliser dans le constructeur de ProgressOptionPane .


(UPDATE) Si vous ne pouvez pas obtenir le code sous TSSL JDK, alors voici une façon sournoise de mettre la main sur la JDialog, alors vous pouvez faire tout ce que vous voulez, y compris la suppression du bouton Annuler:

progressMonitor = new ProgressMonitor(ProgressMonitorDemo.this, 
            "Running a Long Task", 
            "", 0, 100); 
progressMonitor.setMillisToDecideToPopup(0); 
progressMonitor.setMillisToPopup(0); 
progressMonitor.setProgress(0); 
JDialog dialog = (JDialog)progressMonitor.getAccessibleContext().getAccessibleParent(); 
JOptionPane pane = (JOptionPane)dialog.getContentPane().getComponent(0); 
pane.setOptions(new Object[]{}); 

C'est moche, et cela dépend totalement de l'implémentation de ProgressMonitor. Donc, vous devriez vérifier ClassCastException et null.

Pourquoi avez-vous besoin de définir les deux périodes à 0? Sinon, la boîte de dialogue n'est pas créée dans setProgress.

1

Je sais que ce post est un peu vieux, mais la première réponse sur Google, donc je vais poster ma réponse ...

Je n'ai pas de solution pour désactiver le bouton d'annulation mais j'utilise cette astuce: réaffiche le moniteur de progression lorsque l'utilisateur clique sur Annuler.

public void propertyChange (PropertyChangeEvent event) { 
    if (event.getPropertyName().equals("progress")) { 
     int progress = ((Integer) event.getNewValue()).intValue(); 
     lastProgress = progress; 
     progressMonitor.setProgress(progress); 
    } 
    if (progressMonitor.isCanceled()) { 
     progressMonitor = new ProgressMonitor(panel, "", "", 0, 100); 
     progressMonitor.setMillisToDecideToPopup(0); 
     progressMonitor.setMillisToPopup(0); 
     progressMonitor.setProgress(lastProgress); 
    } 
} 

Bien sûr, vous devez vous rappeler la dernière valeur de progression.

Cette solution est un peu moche, mais ça marche pour moi.

Yves

Questions connexes