2010-08-11 9 views
0

Ainsi, lorsque l'utilisateur appuie sur mon JButton, il choisit une heure aléatoire, et après ce temps, il dessinera un ovale à l'écran. Cependant, avec ce que j'ai maintenant, il dessine l'ovale juste après que le bouton est pressé. Je veux qu'il apparaisse après un moment aléatoire.Java drawOval après l'heure aléatoire lorsque l'utilisateur a appuyé sur Jbutton

public void actionPerformed(ActionEvent e) 
    { 
    if (e.getSource() == startButton) 
    { 
     popUpTime = random.nextInt(5000); 
     timer = new Timer(popUpTime, this); 

     x = random.nextInt(400) + 70; 
      y = random.nextInt(400) + 100; 

      points[current++] = new Point(x, y); 

     timer.start(); 
     start(); 

     repaint(); 
    } 


    } 

Répondre

0

Vous pouvez utiliser la fonction de sommeil de la classe de fil à faites attendre le programme pour une heure aléatoire. Quelque chose comme ceci:

try{ 
Thread.sleep(PopUpTime); 
} 
catch(Exception e) 
{} 
// and then compute new points and repaint 
+0

ce n'est pas une bonne idée, vous bloquez le Thread Event Dispatch. –

0

Le problème est votre logique:

if event is start button, then setup oval and timer and call repaint(); 

repeindre votre dessin est en supposant qu'il ovale aux coordonnées définies.

Vous devriez probablement faire quelque chose comme ceci:

if (e.getSource() == startButton) { 
    drawOval = false; // flag to repaint method to NOT display oval 
    // setup timer 
    repaint(); // oval will not be drawn 
else { 
    // assuming timer has fired (which is a bit weak) 
    x = ....; 
    y = ...; 
    drawOval = true; 
    repaint(); // oval will be drawn. 
} 

Votre méthode repeindre() devra vérifier le réglage drawOval:

public void repaint() { 
    if (drawOval) { 
    // draw it 
    } else { 
    // may need to clear oval 
    } 

    // draw other stuff. 
} 
+0

où est-ce que je mettrais la minuterie? – Raptrex

+0

Le commentaire '// setup timer' est l'endroit où je voulais que vous le placiez. –