Comment rendre compte à rebours avec la barre de progression?

Comment puis-je faire en sorte que la barre de progression redescend doucement avec la limite de temps?

class GamePanel extends JPanel implements MouseListener, ActionListener
{
private JButton quit;
private JButton q;
private Font loadFont;
public GamePanel()
{
setBackground(Color.blue); //sets background color
this.setLayout(null);
quit = new JButton("Quit");
quit.addActionListener(this);
quit.setBounds(550, 700, 100, 30);
this.add(quit);
q = new JButton("Questions");
q.addActionListener(this);
q.setBounds(100, 100, 120, 30);
this.add(q);
loadFont = new Font("Serif", Font.PLAIN, 30);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.black);
g.fillRect(80, 100, 610, 560);
g.setColor(Color.white);
g.fillRect(90, 110, 110, 100);//1st column
g.fillRect(90, 220, 110, 100);//
g.fillRect(90, 330, 110, 100);//
g.fillRect(90, 440, 110, 100);//
g.fillRect(90, 550, 110, 100);//
g.fillRect(210, 110, 110, 100);//2nd column
g.fillRect(210, 220, 110, 100);//
g.fillRect(210, 330, 110, 100);//
g.fillRect(210, 440, 110, 100);//
g.fillRect(210, 550, 110, 100);//
g.fillRect(330, 110, 110, 100);//3rd column
g.fillRect(330, 220, 110, 100);//
g.fillRect(330, 330, 110, 100);//
g.fillRect(330, 440, 110, 100);//
g.fillRect(330, 550, 110, 100);//
g.fillRect(450, 110, 110, 100);//4th column
g.fillRect(450, 220, 110, 100);//
g.fillRect(450, 330, 110, 100);//
g.fillRect(450, 440, 110, 100);//
g.fillRect(450, 550, 110, 100);//
g.fillRect(570, 110, 110, 100);//5th column
g.fillRect(570, 220, 110, 100);//
g.fillRect(570, 330, 110, 100);//
g.fillRect(570, 440, 110, 100);//
g.fillRect(570, 550, 110, 100);//
g.setColor(Color.green);
g.setFont(loadFont);
g.drawString(input + ":", 100, 710);
}
public void actionPerformed(ActionEvent e)
{
String order = e.getActionCommand();
if(order.equals("Quit"))
cards.show(c, "Introduction");
if(order.equals("Questions"))
cards.show(c, "Questions");
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
class QuestionPanel extends JPanel implements ActionListener
{
private long startTime, elapsedTime;
private Timer timer;
private int countdown;
private Font loadFont;
public QuestionPanel()
{
setBackground(Color.pink); //sets background color
this.setLayout(null);  //moved into constructor from ActionPerformed: only change layout in constructor
startTime = 0;
elapsedTime = 0;
countdown = 590;
loadFont = new Font("Segoe Script", Font.BOLD, 20);
if(timer == null)
{//use the biggest value possible that provides your desired time keeping precision (usually no less than 15 on Windows)
timer = new Timer(100, this);  
startTime = System.currentTimeMillis();  //gets start time in milliseconds
timer.start();
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.fillRect(100, 100, 600, 25);
g.setColor(Color.green);
g.fillRect(105, 105, countdown, 15);
g.setColor(Color.black);
g.setFont(loadFont);
g.drawString("" + ((System.currentTimeMillis() - startTime) / 1000.0), 100, 80);  //display remaining time
}
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
elapsedTime = System.currentTimeMillis() - startTime;
if(elapsedTime < (5000))
{
countdown--;
repaint();
}
else
{
timer.stop();
if(timer == null)
{
timer = new Timer(500, this);
timer.start();
}
}
if(elapsedTime >= (5000))  //can't use == here because of limited precision of system clock
cards.show(c, "Correct!");
}
}
class AnswerPanel extends JPanel implements ActionListener
{
private JButton revert;
public AnswerPanel()
{
setBackground(Color.yellow); //sets background color
this.setLayout(null);
revert = new JButton("Back");
revert.addActionListener(this);
revert.setBounds(340, 700, 100, 30);
this.add(revert);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
public void actionPerformed(ActionEvent e)
{
String directive = e.getActionCommand();
if(directive.equals("Back"))
cards.show(c, "Start");
}
}
class FailPanel extends JPanel implements ActionListener
{
private JButton turnaround;
public FailPanel()
{
setBackground(Color.green); //sets background color
this.setLayout(null);
turnaround = new JButton("Back");
turnaround.addActionListener(this);
turnaround.setBounds(340, 700, 100, 30);
this.add(turnaround);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
public void actionPerformed(ActionEvent e)
{
String bidding = e.getActionCommand();
if(bidding.equals("Back"))
cards.show(c, "Start");
}
}
}//end of the entire program
J'aimerais que les gens prennent un coup d'oeil à la QuestionPanel. Je suis en train de faire le compte à rebours, tandis que la barre de progression est également en baisse. Lorsque la minuterie atteint 0 (après départ à 5), un autre groupe est supposé être montré. Un autre problème est que le compte à rebours commence avant même d'arriver à ce groupe; je veux être en mesure de contrôler lorsque le compte à rebours commence.
Saint pavé de texte, Batman! Je voudrais essayer de la condensation de la question vers le bas pour le plus petit d'un exemple que vous pouvez faire.
J'ai fortement deuxième TFRM de la suggestion. C'est juste beaucoup trop de code. Vous aurez à faire quelques efforts pour le rendre à la fois plus petits et compréhensible, mais c'est un effort bien passé. Sinon, beaucoup auront mieux à faire de leur dimanche soir que de lire un volume 3 livre de code.
J'ai 5 lettres pour vous SSCCE. Préparer un SSCCE et il est probable que le problème (et la solution) deviendra clair comme vous le faites. Si cela n'arrive pas, au moins vous aurez un court morceau de code que d'autres personnes sont susceptibles de regarder de plus près. Comme il est, vous nous demandez de chalut par près de 450 lignes de code à la recherche de l'erreur. Votre demande sera probablement ignoré. @HFOE merci pour la mise en forme du code.
Votre programme pourrait bénéficier par votre fait ce, car il pourrait vous aider dans votre objectif de séparer la logique du programme du code de la GUI. Aussi, vous aurez envie de se débarrasser de tout ce que la précision de positionnement et de dimensionnement et au lieu d'utiliser les gestionnaires de mise en page, surtout si vous voulez que les gens avec différentes tailles de moniteurs et les résolutions d'écran pour être en mesure de voir votre interface graphique. Je ne peux pas le voir entièrement sur la mienne par exemple.

OriginalL'auteur wannabeprogrammer | 2011-05-09