Timer - Utilisation dans un actionPerformed
Bonjour,
J'aimerais utiliser un Timer dans un actionPerformed tel que lorsqu'on appuie sur un bouton, toutes les deux secondes une image dans la fenêtre soit mise à jour jusqu'à avoir fait défiler toutes les images ou avoir appuyé sur un autre bouton (je n'ai pas encore fait cette dernière option), mais je n'arrive pas à le faire (j'ai testé de plusieurs façons qui plantent parfois..). Dans la version ci-dessous, ça met directement à la dernière image et après ça lance le timer avec la mise à jour de la JProgressBar, donc on dirait que le while est prioritaire sur le t.start() o.O. Je précise que je n'ai jamais utilisé de Timer donc je n'ai peut-être pas compris le principe ^^.
Le code, plus explicite (cf. le gras), ci-dessous :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import java.awt.event.*;
import javax.swing.Timer;
import javax.swing.event.*;
public class ControlButton implements ActionListener {
// Attributes
public Model model;
public Fenetre fenetre;
Timer t;
// Constructor
public ControlButton(Model m, Fenetre f) {
model = m;
fenetre = f;
fenetre.setButtonControler(this);
}
// Methods
public void actionPerformed (ActionEvent e) {
if (e.getSource()==fenetre.buttonv2[0]) {
// First
model.setIndiceVue2(0);
fenetre.setLimagev2(model.getTableauImages()[model.getIndiceVue2()]);
fenetre.progressbarv2.setValue(100/model.getNombre_images());
}
else if (e.getSource()==fenetre.buttonv2[1]) {
// Previous
if (model.getIndiceVue2() > 0) {
model.setIndiceVue2(model.getIndiceVue2()-1);
fenetre.setLimagev2(model.getTableauImages()[model.getIndiceVue2()]);
fenetre.progressbarv2.setValue(fenetre.progressbarv2.getValue()-100/model.getNombre_images());
}
}
else if (e.getSource()==fenetre.buttonv2[2]) {
// Play
initTimer();
while (model.getIndiceVue2() < model.getNombre_images()) {
model.setIndiceVue2(model.getIndiceVue2()+1);
fenetre.setLimagev2(model.getTableauImages()[model.getIndiceVue2()]);
t.start();
}
}
else if (e.getSource()==fenetre.buttonv2[3]) {
// Next
if (model.getIndiceVue2() < model.getNombre_images()) {
model.setIndiceVue2(model.getIndiceVue2()+1);
fenetre.setLimagev2(model.getTableauImages()[model.getIndiceVue2()]);
fenetre.progressbarv2.setValue(fenetre.progressbarv2.getValue()+100/model.getNombre_images());
}
}
else if (e.getSource()==fenetre.buttonv2[4]) {
// Last
model.setIndiceVue2((model.getNombre_images())-1);
fenetre.setLimagev2(model.getTableauImages()[model.getIndiceVue2()]);
fenetre.progressbarv2.setValue(100);
}
}
public void initTimer() {
t=new Timer(1000,new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (fenetre.progressbarv2.getValue() < 100) {
fenetre.progressbarv2.setValue(fenetre.progressbarv2.getValue()+100/model.getNombre_images());
} else {
t.stop();
}
}
});
}
} |
Merci !