Toon posts:

[JAVA] Hulp gewenst met het maken van een timer

Pagina: 1
Acties:
  • 274 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met het maken van een simpele timer. Echter zit ik behoorlijk vast en kan ik wat hulp gebruiken!

De code die ik tot nu toe heb ik als volgt:

Java:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
 * <p>Title: Timer </p>
 * <p>Description: Timer</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics.*;

public class counter2 extends JFrame implements ActionListener
{
   //Het aanmaken van drie buttons
   private JButton start = new JButton("start");
   private JButton stop  = new JButton("stop");
   private JButton reset = new JButton("reset");

   //Aanmaken van de variabelen voor het tellen
   double tStart = 0;
   double tEind  = 0;

   //voorbereiden en maken van de eerste input
   String input = " " + tEind;
   JLabel result = new JLabel(output);

   //constructor
   public counter2()
   {
     //Bouwen van het scherm en Layout instellen
     Container container = getContentPane();
     container.setLayout(new BorderLayout());

     //aanmaken van twee panelen, waar de inhoud in gaat komen.
     JPanel p1 = new JPanel();
     JPanel p2 = new JPanel();

     //panelen instellen op flowlayout.
     p1.setLayout(new FlowLayout());
     p2.setLayout(new FlowLayout());

     // Een JTextfield oid toevoegen aan p1
     p1.add(result);

     // toevoegingen aan p2
     p2.add(start);

     // p1 en p2 toevoegen aan container
     container.add(p1, BorderLayout.NORTH);
     container.add(p2, BorderLayout.SOUTH);

     //ActionListener koppelen aan de knoppen.
     start.addActionListener(this);
   }

   public static void main(String[] args)
   {
    //Standaard stuk grafische applicatie bouwen!
    counter2 frame = new counter2();
    frame.setTitle("PrikKlok");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 200);
    frame.setVisible(true);
   }

   public void actionPerformed(ActionEvent e)
   {
      if (e.getSource() == start)
      {
        tStart = System.currentTimeMillis();
        repaint();
      }

      if (e.getSource() == stop)
      {
        tEind = (System.currentTimeMillis() - tStart)/1000;
        result.setText(output);//output naar het scherm zetten.
        repaint();
     }

  }
}


Het is dus zeg maar de bedoeling dat er een start button, een pauze button en een stop button is, en dat deze dus werken indien erop geklikt word. De functies zouden alsvolgd moeten zijn ->

Start = Hierdoor gaat de timer lopen.
Pauze = Hierdoor stopt de timer tijdelijk, word er nogmaals op de pauze button geklikt gaat de time weer verder.
Stop = Hierdoor stopt de tijd en word de uiteindelijk tijd op het scherm weergeven.

Alvast erg bedankt voor eventuele hulp!

[ Voor 7% gewijzigd door NMe op 10-01-2006 13:40 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Wat is het probleem precies? Is deze code onvolledig? Of zou hij af moeten zijn maar werkt hij niet? Krijg je een foutmelding? Waar denk je zelf dat het probleem zit? Je geeft vrij weinig informatie, zou je wat uitgebreider kunnen zijn? Zie ook P&W FAQ - De "quickstart". :)

Lees trouwens ook Hoe post je code? / Hoe gebruik je de code tag? even door, dan hoef je de volgende keer geen table meer te gebruiken. ;)

Welkom op GoT trouwens. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Hydra
  • Registratie: September 2000
  • Laatst online: 22-01 13:59
En je wil dat wij het afmaken?

https://niels.nu


Verwijderd

Topicstarter
-NMe- schreef op dinsdag 10 januari 2006 @ 13:39:
Wat is het probleem precies? Is deze code onvolledig? Of zou hij af moeten zijn maar werkt hij niet? Krijg je een foutmelding? Waar denk je zelf dat het probleem zit? Je geeft vrij weinig informatie, zou je wat uitgebreider kunnen zijn? Zie ook P&W FAQ - De "quickstart". :)

Lees trouwens ook Hoe post je code? / Hoe gebruik je de code tag? even door, dan hoef je de volgende keer geen table meer te gebruiken. ;)

Welkom op GoT trouwens. :)
Bedankt voor je snelle reactie.

Het probleem is inderdaad dat deze code onvolledig is. Ik ben zelf aan het leren om te programmeren in java, maar ben nog een echt n00b erin. Nu heb ik dit stukje code van mijn leraar gekregen om te oefenen maar ik kom niet verder als ik nu ben. Nu adviseerde hij mij om het via forums te vragen, want volgens hem leer ik op die manier altijd nog meer dan als ik direct een antwoord van hem krijg.

Het is dus zeg maar onvolledige code. Ik weet zelf dus niet wat het probleem precies is. Ik vermoed dat ik als beginner een paar dingen het overzien ( van die echte beginners fouten dus ) en daardoor ben vergeten toe te voegen.

Dus mijn vraag is niet zo zeer of jullie het voor mij zouden willen af maken, maar in elk geval enig sinds advies geven. Een voorbeeld om het compleet af te maken zou ook zeer gewenst zijn zodat ik een goed voorbeeld heb om mee te kunnen oefen en te kunnen controleren of hetgeen wat ik heb correct is.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Een van je problemen is zo ver ik zie dat je nooit je scherm update. Je zult er dus op de een of andere manier voor moeten zorgen dat om de zoveel tijd je scherm opnieuw ververst wordt. Dit kan je bijvoorbeeld doen met een lusje, alleen dan heb je grote kans dat je GUI niet meer werkt aangezien je dan de volledige tijd van je GUI Thread aan het gebruiken ben.
Je zult dus moeten zorgen dat er een stukje code eens in de zoveel tijd aangeroepen wordt. Volgens mij bestaat er iets van een Timer class in java ( weet ik overigens niet zeker ) en daar zou ik eens naar kijken als ik jou was.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 14:06

Robtimus

me Robtimus no like you

Zoek naar java.util.Timer of javax.swing.Timer, daarmee kom je al een eind.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • blizt
  • Registratie: Januari 2003
  • Laatst online: 29-09-2025

blizt

Wannabe-geek

Als klas- en groepsgenoot de TS even 'n reactie. Persoonlijk gaat het mij beter af, maar ik zit ook nog vast met wat vreemd dingen met de pause-knop. Niets wat we niet kunnen oplossen echter. :)
Wat misschien wat onduidelijk is, (zeker gezien de verwijzingen naar dingen als java.util.Timer) is dat het niet om 'n timer gaat, maar meer om een stopwatch.
Het is namelijk de bedoeling dat de tijdsduur van een telefoongesprek bijgehouden kan worden.

United we stand, and divided we fall


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 13-04 23:48

Nick_S

++?????++ Out of Cheese Error

Even via pseudocode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function start() {
    totaleTijd = 0;
    startTijd = nu;
    gepauseerd = false;
}

function pause() {
    if (gepauseerd) {
         startTijd = nu;
    } else {
          totaleTijd = totaleTijd + (nu - startTijd);
    }
    gepauseerd != gepauseerd;
}

function stop() {
    if ( not gepauseerd) {
        totaleTijd = totaleTijd + (nu - startTijd);
    }
}


Als je je timer ook realtime wilt afbeelden, zul je voor je updates die java.util.Timer nodig hebben, die je elke seconde laat updaten, bijvoorbeeld.

Hopelijk kun je hier verder mee.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03

bvp

blizt schreef op dinsdag 10 januari 2006 @ 15:01:
Als klas- en groepsgenoot de TS even 'n reactie. Persoonlijk gaat het mij beter af, maar ik zit ook nog vast met wat vreemd dingen met de pause-knop. Niets wat we niet kunnen oplossen echter. :)
Wat misschien wat onduidelijk is, (zeker gezien de verwijzingen naar dingen als java.util.Timer) is dat het niet om 'n timer gaat, maar meer om een stopwatch.
Het is namelijk de bedoeling dat de tijdsduur van een telefoongesprek bijgehouden kan worden.
Het is maar net wat je precies wilt bereiken hier.
Als je bij de start-knop namelijk wilt dat de tijd zichtbaar in beeld op loopt zul je met Threads moeten gaan werken.
Als dit dan niet doet, zul je nl. alleen maar de tijd zien lopen en kun je niet meer op de knoppen reset en stop klikken. (Het simuleren van meerdere processoren > Threads).

Als het alleen maar de bedoeling is om de tijd achter de schermen te laten lopen bij het drukken op de start-knop, de tussentijd weer te geven bij de reset maar tijd door te laten lopen en bij het drukken van de stop-knop de tijd weer op 0 te zetten dan is ie al bijna af.
In dat geval hoef je alleen eventhandlers te schrijven voor de reset:
LABEL.zetTussentijd.

En voor de stop:
LABEL.zetEindtijd
zetTellerOpNul

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 14:06

Robtimus

me Robtimus no like you

Gebruik een Timer. Elke tik (seconde, 10ms, whatever*) verhoog je de tijd en stuur je een signaal door (listeners anyone?) dat je GUI geupdate moet worden.
Heb ik zelf ook al eens geschreven, zowel digitaal als analoog (clock volledig gescheiden van de GUI natuurlijk ;)), stond ook op CodeBase, maar die site doet het niet meer helaas.


* Tip uit ervaring: minimaal 10ms gebruiken. java.util.Timer kan kleiner niet zo goed aan.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

IceManX schreef op dinsdag 10 januari 2006 @ 15:39:
* Tip uit ervaring: minimaal 10ms gebruiken. java.util.Timer kan kleiner niet zo goed aan.
Het gaat er niet zo om wat java aan kan, maar hoe snel je systeem is. De timer moet ook zijn werk kunnen verrichten en als de verwerking langer gaat duren dan de interval dan ....
Pagina: 1