Désactiver le bouton à cliquer avant de actionPerformed est terminé java
J'ai un bouton à faire une longue fonction, je veux désactiver ce bouton une fois que l'utilisateur une fois cliquez sur elle pour l'empêcher de cliquez de nouveau sur beaucoup de fois
Le bouton désactivé mais le problème est que une fois la fonction terminée, le bouton devient actif de nouveau
j'ai essayé de mettre button.setEnabled(false);
dans un nouveau thread, mais il ne fonctionne pas non plus
pour tester cet exemple de code
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
button.setEnabled(false);
for (int i = 0; i < Integer.MAX_VALUE; i++) {
for (int j = 0; j < Integer.MAX_VALUE; j++) {
for (int ii = 0; ii < Integer.MAX_VALUE; ii++) {
}
}
}
}
});
pourquoi ne mettez vous pas "bouton.activé(false)" à la fin pour les boucles, s'il vous Plaît pouvez vous désactivez la fonction de finition.
Ne bloquez pas l'EDT (Event Dispatch Thread) - le GUI de "geler" quand ça arrive. Au lieu d'appeler
A) parce que ce n'est pas le problème, et b) qu'il irait à l'encontre de ce que l'OP est d'essayer de le réaliser!
Le bouton désactivé mais le problème est que une fois la fonction terminée, le bouton devient actif j'ai essayé de l'exécution de votre code. Le problème que j'ai rencontré est l'INTERFACE utilisateur se bloque. Le bouton est toujours désactivé après l'exécution de la fonction, contrairement à vos conclusions. Peut-être que vous avez manqué certains codes qui provoque la réactivation du bouton?
Ne bloquez pas l'EDT (Event Dispatch Thread) - le GUI de "geler" quand ça arrive. Au lieu d'appeler
Thread.sleep(n)
mettre en œuvre un Swing Timer
pour la répétition de tâches ou d'une SwingWorker
pour les tâches longues. Voir la Simultanéité dans Swing pour plus de détails.A) parce que ce n'est pas le problème, et b) qu'il irait à l'encontre de ce que l'OP est d'essayer de le réaliser!
button.enabled(false)
dose n'existe pas en javaLe bouton désactivé mais le problème est que une fois la fonction terminée, le bouton devient actif j'ai essayé de l'exécution de votre code. Le problème que j'ai rencontré est l'INTERFACE utilisateur se bloque. Le bouton est toujours désactivé après l'exécution de la fonction, contrairement à vos conclusions. Peut-être que vous avez manqué certains codes qui provoque la réactivation du bouton?
OriginalL'auteur Steve | 2013-07-23
Vous devez vous connecter pour publier un commentaire.
Utilisation
SwingWorker
pour de longues tâches en arrière-plan. Dans ce exemple, lestartButton
action nesetEnabled(false)
, et que le travailleurdone()
mise en œuvre nesetEnabled(true)
.OriginalL'auteur trashgod
tout enveloppé dans
public void actionPerformed(ActionEvent ae) {
est faite à un moment, (sur l'écran) lorsque toutes les lignes de code sont exécutées, c'est la règle de base pour l'AWT/Swing Auditeurs et EventDispatchThreadvous avez besoin pour retarder l'événement dans l'EDT en utilisant
button.setEnabled(false);
) àSwingWorker
, le plus facile àRunnable#Thread
, notez toutes les sorties deRunnable#Thread
à la déjà visible Swing GUI doit être enveloppé dansinvokeLater
approprié de moyens d'utiliser uniquement
Swing Action
et au lieu de verrouillage de laJButton
pour définirAction.setEnabled(false)
seulementVous pouvez consulter le programme examiné en ce qui concerne Q&A.
OriginalL'auteur mKorbel
Edit: Il est tentant de penser que vous pourriez utiliser un écouteur de souris pour le mettre en œuvre. Par exemple, pour empêcher vous pouvez utiliser la souris libéré de l'événement ou de la souris cliqué sur l'événement de la souris à l'écoute. L'intérieur que l'on peut écrire
button.setEnable(false)
. Malheureusement, cela bloque aussi la event dispatch thread.MouseEvent
sera tiré à tous).Le blocage de l'EDT n'est pas la solution de blocage de l'EDT.
pas la meilleure réponse, car elle ne fonctionne pas complètement désactivé le bouton uniquement en vue, mais si vous avez cliqué sur ce travail parce que MousePressed,MouseReleased,MouseClicked de travail soit toujours si le bouton est désactivé
ya vous avez raison, j'ai essayé la même chose....
merci.
OriginalL'auteur Nirav Kamani