Bouton ActionListener
Ok, donc j'ai fait un programme simple qui ajoute de la valeur au compteur chaque fois qu'un bouton est cliqué.
Maintenant, je voudrais ajouter un bouton "Auto" en option pour accroître la valeur du compteur lorsque le bouton "Auto" est sélectionné. Je vais avoir des problèmes avec elle parce qu'elle ne rend pas chaque valeur du compteur sur l'écran, au lieu de la valeur des mises à jour quand la boucle est terminée.. Voici mon code:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Gui extends JFrame{
private static final long serialVersionUID = 1L;
private JButton uselesButton;
private JButton autoButton;
private FlowLayout layout;
private long counter = 0;
public Gui() {
super("Button");
layout = new FlowLayout(FlowLayout.CENTER);
this.setLayout(layout);
uselesButton = new JButton(String.format("Pressed %d times", counter));
add(uselesButton);
uselesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
uselesButton.setText(String.format("Pressed %d times", counter));
}
});
autoButton = new JButton("Auto");
add(autoButton);
autoButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for(long i =0; i < 99999999;i++) {
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e1) {
System.out.println("ERROR");
}
counter = i;
uselesButton.setText(String.format("Pressed %d times", counter));
}
}
});
}
}
Gardez à l'esprit que je suis un débutant... Toute aide appréciée 🙂
Quelle est la question?
Ce exactement est le bouton auto censé faire?
Je pense que Swing Timer les résoudre.
Ce exactement est le bouton auto censé faire?
Je pense que Swing Timer les résoudre.
OriginalL'auteur dev-cyprium | 2013-07-07
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil au tutoriel sur la Façon d'Utiliser Swing Timer et ensuite regarder ma solution:
OriginalL'auteur Azad
le problème ici est que le système est dans la boucle, donc il ne peut pas peindre les changements.
pour ce faire, vous devez ouvrir un nouveau thread. le nouveau thread va faire la boucle, et le thread principal va redessiner la forme.
encore une chose, vous ne devriez pas le faire dormir sur le thread principal. vous pouvez utiliser une minuterie qui vous cochez toutes les 10 millisecondes au lieu de
sleep(10)
ici est un exemple
Avez-vous testé vos recommandations?
repaint()
de ne pas faire une chose dans le cas d'une boucle d'attacher la HAE. Veuillez supprimer cette recommandation afin que je puisse supprimer le droit de vote.Aussi, la peinture thread n'est pas le thread principal. C'est l'event dispatch thread.
OriginalL'auteur No Idea For Name
votre code de bloquer le thread GUI (HAE) lors de l'entrée à l'intérieur de cette boucle (GUI se bloque, le bouton ne sera pas de mise à jour jusqu'à la fin), si vous devez ajouter votre code à l'intérieur d'un autre thread de travail:
OriginalL'auteur Wajdy Essam