简体   繁体   中英

Measure time between 2 button clicks. (Java)

I've just started with Java at school. We've got an exercise, but I can't find the answer.

I have to measure the time between a click on the start button and a click on the stop button. This is what i've got so far.

import java.awt.Rectangle;

class Fitts {

public static Rectangle getLocatie(int vensterBreedte, int vensterHoogte) {
    // Declareer variabelen
    int breedte, hoogte, x, y;

    // Kies waarden voor variabelen
    breedte = 200;
    hoogte = 50;
    y = 500;
    x = 200;

    // Geef de grootte en locatie terug als een gecombineerde waarde
    return new Rectangle(x, y, breedte, hoogte);
}

public static long start() {
    long startTime;
    // Deze code wordt uitgevoerd als op de startknop wordt geklikt
    startTime = System.nanoTime();
    System.out.println("start tijd is: " + startTime);
    return startTime;

}

public static void stop() {
    long startTime, endTime, elapsedTime;
    // Deze code wordt uitgevoerd als op de doelknop wordt geklikt
    startTime = start (); 
    endTime = System.nanoTime();
    System.out.println("eind tijd is: " + endTime);
    elapsedTime = (endTime - startTime)/ 1000000000; 
    System.out.println ("De tijdsduur was " + elapsedTime + " milliseconden.");
    System.out.println();
   }   
}

We've also got this code, but we are not allowed to change anything in this code:

public class FittsVenster extends JFrame implements ActionListener, ComponentListener {
private static final long serialVersionUID = 0;

// Configuratie
final static int WIDTH = 600;
final static int HEIGHT = 600;
final static int BUTTONWIDTH = 200;
final static int BUTTONHEIGHT = 40;

// De elementen in de GUI
private JButton btnStart, btnTarget;

/**
 * Constructor, wordt aangeroepen bij het maken van Main object
 */
public FittsVenster() {
    // Wat standaard eigenschappen
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setTitle("Wet van Fitts");
    setSize(WIDTH, HEIGHT);
    addComponentListener(this);

    // Maak een interface om de knoppen te kunnen plaatsen
    JPanel panel = new JPanel();
    getContentPane().add(panel);
    panel.setLayout(null);

    // Startknop, standaard zichtbaar
    btnStart = new JButton("Start");
    btnStart.addActionListener(this);
    btnStart.setBounds(0, 20, BUTTONWIDTH, BUTTONHEIGHT);
    panel.add(btnStart);

    // Doelknop, standaard onzichtbaar
    btnTarget = new JButton("Klik hier!");
    btnTarget.addActionListener(this);
    btnTarget.setVisible(false);
    panel.add(btnTarget);
}

/**
 * Methode die aangeroepen wordt bij een druk op een knop
 */
@Override
public void actionPerformed(ActionEvent e) {
    if(e.getSource() == btnStart) {
        btnTarget.setBounds(Fitts.getLocatie(getContentPane().getWidth(), getContentPane().getHeight()));
        Fitts.start();
        btnStart.setVisible(false);
        btnTarget.setVisible(true);
    } else if(e.getSource() == btnTarget) {
        Fitts.stop();
        btnStart.setVisible(true);
        btnTarget.setVisible(false);
    }
}


/**
 * De main methode om het venster te laten zien, details
 * over de implementatie zijn niet belangrijk.
 */
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            FittsVenster ex = new FittsVenster();
            ex.setVisible(true);
        }
    });
}

/**
 * Wordt aangeroepen wanneer het venster van grootte verandert,
 * zorgt ervoor dat knoppen gecentreerd worden.
 */
@Override
public void componentResized(ComponentEvent e) {
    btnStart.setLocation(getContentPane().getWidth() / 2 - btnStart.getWidth() / 2,
            getContentPane().getHeight() / 2 - btnStart.getHeight() / 2);
}

/**
 * Wordt aangeroepen wanneer het venster getoond wordt,
 * zorgt ervoor dat we initieel de knoppen centreren.
 */
@Override
public void componentShown(ComponentEvent e) {
    this.componentResized(e);
}

// Ongebruikte events

@Override
public void componentHidden(ComponentEvent e) { }

@Override
public void componentMoved(ComponentEvent e) { }

}

Here is a class:

public class TimerWatch {
    private long lastClick=0;

    public long tick() {
        long c = System.nanoTime();

        long result = c-lastClick;
        lastClick = c;

        return result;
    }
}

Each time you invoke the tick() method, it will return the number of nanoseconds elapsed since it was invoked previously.

And an advise: stick to just one language in your code... If you really want to use Dutch, use it consistently, but don't mix.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM