SwingWorker # Setprogress code >
jette un illegalargumentException code> Si l'argument n'est pas de 0 à 100. Je pensais que l'objectif principal de la méthode
setProgress code> était de mettre à jour un
jProgressBar code> (tel qu'il était dans Ce tutoriel ). Si tel est le cas, pourquoi limiter le
swingworker code> S Progressez sur [0, 100] Lorsque
JPROGRESSBAR code> S n'est pas limité? P>
4 Réponses :
1) 2) swingworker # setProgress code> ---> Je prends cela comme une valeur en vigueur, il existe essentiellement une gamme entre 0 et 100, convenu que l'algèbre connaît%% ou 1 m de%, mais de la même manière que vous Peut calculer la quatrième / cinquième dimension, le petit bit dur pourrait être avec Equation Drake , mais possible P >
jProgressbar code> ----> n'a pas ces limitations / restriction, car vous pouvez écraser un code agréable, où il est possible de basculer (jcombobox) entre la valeur en%, MB, restez .. .. pour le progrès p>
Oui, le travailleur devrait mettre à l'échelle le résultat avant d'appeler setProgress () code>, comme indiqué ici .
Y a-t-il une bonne raison pour laquelle ils ont limité les progrès sur [0.100] ou était-ce juste un choix de conception (mauvais)?
Non, ce n'est pas une vraie raison de la limitation, peut-être que quelqu'un qui a construit cette API peut répondre à votre question, mais API indique que l'API a été implémentée BoundProperty Java.sun.com/developer/OnlineTraning/beans/beans4/bound.htm l pour PropertyChangelistener docs.oracle.com/javase/tatutorial/uiswing/events/... , cependant, ces implémentations d'avenir en swing ont une longue histoire complète de showstopers, fixé en java1.6_019 ou 20
@Jeffrey: Plus ici .
Cela dépend de votre cas d'utilisation, mais vous pouvez également utiliser la méthode de publication pour publier des progrès et mettre à jour une barre de progression de la méthode de publication. Voir Ma réponse sur une autre question à une autre question pour un exemple p>
J'ai pensé à utiliser cela, mais cela ne fonctionnera pas pour mon cas d'utilisation. J'utilise un swingworker code> pour obtenir des informations pour un
JTable code> sur la base de laquelle les indices de la ligne sont sélectionnés sur cette table. Pour chaque index sélectionné, le
swingworker code> obtient les informations nécessaires à cette ligne (
1 code> à
x code> pièces d'information) et utilise
publier < / Code> et
processus code> Pour mettre à jour le modèle code> JTAble code> une fois qu'une ligne complète d'informations est disponible. Cependant, je veux que le
jProgressbar code> à mettre à jour une fois qu'une seule information est disponible (au lieu d'une fois une ligne entière disponible).
Y a-t-il une bonne raison pour laquelle ils ont limité les progrès sur [0,100]? P> blockQuote>
Dans la mesure où cette question a une réponse constructive, la notion de ce qui constitue des progrès est probablement mieux connue de tout ce qui est modélisé dans le fil de fond. La mise à l'échelle limite la quantité de détail qui doit être exposée. P>
en même temps,
SwingWorker code>
est prévu em> être sous-classé. Rien ne exclut l'ajout d'unsetProgress (INT Progression, dans MIN, INT MAX) CODE> Méthode et le support de la propriété Passant à la propriété, mais il est difficile de voir un avantage - le destinataire devra simplement l'accabler d'affichage. < / p>
Aaaach, le temps de dormir +1
SetProgress est pas i> une méthode destinée à des dérogations (trivialement, comme c'est final :-) ni contourner le contrat de la propriété "Progrès"
Discuter de la conception de l'API est assez amusante, mais sujette à deviner: -) p>
Certaines pensées aléatoires à la fin de la semaine: p>
Le modèle de processus de base d'un swingworker est de permettre de faire quelque chose en arrière-plan et de prendre en charge la signalement des résultats intermédiaires et de fin de fin de l'EDT. p> li>
Il est intimé pour le sous-classement (comme @trashgod déjà souligné), il essaie tout en même temps de minimiser les efforts requis: l'état et le progrès sont les propriétés de la commodité em> entièrement définies et mises en œuvre, destiné à être utilisé comme-est. p> li>
Être donc, les règles de l'API DOC - qui indique clairement les valeurs valides du processus de propriété lié étant dans la gamme de 0 ... 100, incusivement. Aucune ambiguïté, rien ne soit autorisé à être modifié dans des implémentations personnalisées. Afficher les progrès en pourcentage est le cas d'utilisation la plus courante, en soutenant que sur la boîte est une chose raisonnable à faire. p> li>
Pour signaler les résultats intermédiaires dans les coordonnées différentes du pourcentage, le chemin intenté consiste à mettre en œuvre le processus (..). Il appartient à l'imploration personnalisée de quoi il suffit exactement, pourrait tirer une propriété définie personnalisée ou remplir un modèle de vue directement ou ... quel que soit le p> li>
Enfin, l'exemple de tutoriel est juste que, un exemple. De plus, c'est incompatible en soi: la description mentionnant une méthode Tâche.GetlenghtOsTask qui n'est pas implémentée dans la personnalisation SwingWorker. Mon (sauvage) devinez, c'est que l'exemple de texte est toujours basé sur une version plus ancienne qui aurait pu soutenir des valeurs arbitraires. P> li> ul>
Pour répondre à la question (mes centièmes 0.02Euro :-) - rien de mauvais dans la conception, c'est une implation de base bien équilibrée qui gère les cas d'utilisation courants hors de la boîte et est suffisamment flexible pour faire plus Exigence avancée simple à mettre en œuvre. P>
à mettre à jour une fois qu'une seule information est disponible p> blockQuote>
Vous ne pouvez pas contrôler complètement la granularité des rapports: tout ce que vous pouvez faire, c'est de définir l'unité em> du plus petit morceau, puis doit s'attendre à recevoir une ou plusieurs de ces plus petites pièces de monnaie. p>
@ Mдγγбдll C'est ce que je pensais, mais je voulais voir s'il y avait une raison réelle.