4 Stimmen

Erstellen eines Count Up-Timers zur Unterbrechung in java

Ich versuche, ein Timer-basiertes Punktesystem für eine Puzzle-Anwendung zu implementieren, die ich gerade schreibe.

Kann mir jemand ein Beispiel für die Erstellung eines JLabel oder Panel in Swing geben, das einen sichtbar zählenden Timer (in Sekunden von 0) enthält, der bei einem Aufruf von einer Methode anhält. Und seinen Wert zurückgibt.

Beispiel:

Stunden:Minuten:Sekunden [00:00:00] [00:00:01] usw.. überschreibt den vorherigen Eintrag.

Gracias

EDIT: Dies ist eine Anpassung des von trashgod verlinkten Beispielcodes: ClockExample , die einfache if-Anweisungen verwendet, um Stunden, Minuten und Sekunden anzuzeigen...

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.Timer;

/** @see https://stackoverflow.com/questions/5528939*/
class ClockExample extends JFrame {

private static final int N = 60;
private static final String stop = "Stop";
private static final String start = "Start";
private final ClockListener cl = new ClockListener();
private final Timer t = new Timer(1000, cl);
private final JTextField tf = new JTextField(8);

public ClockExample() {
    t.setInitialDelay(0);

    JPanel panel = new JPanel();
    tf.setHorizontalAlignment(JTextField.RIGHT);
    tf.setEditable(false);
    panel.add(tf);
    final JToggleButton b = new JToggleButton(stop);
    b.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (b.isSelected()) {
                t.stop();
                b.setText(start);
            } else {
                t.start();
                b.setText(stop);
            }
        }
    });
    panel.add(b);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.add(panel);
    this.setTitle("Timer");
    this.pack();
    this.setLocationRelativeTo(null);
    this.setVisible(true);
}

public void start() {
    t.start();
}

private class ClockListener implements ActionListener {

    private int hours;
    private int minutes;
    private int seconds;
    private String hour;
    private String minute;
    private String second;

    @Override
    public void actionPerformed(ActionEvent e) {
        NumberFormat formatter = new DecimalFormat("00");
        if (seconds == N) {
            seconds = 00;
            minutes++;
        }

        if (minutes == N) {
            minutes = 00;
            hours++;
        }
        hour = formatter.format(hours);
        minute = formatter.format(minutes);
        second = formatter.format(seconds);
        tf.setText(String.valueOf(hour + ":" + minute + ":" + second));
        seconds++;
    }
}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            ClockExample clock = new ClockExample();
            clock.start();
        }
    });
  }
}

Nochmals vielen Dank an alle!

3 Stimmen

Ich denke, Sie sollten sich den Swing Timer ansehen ( download.oracle.com/javase/6/docs/api/index.html?javax/swing/ ). Sie kann verwendet werden, um eine Aktion periodisch auszulösen, bis sie gestoppt wird.

1 Stimmen

Schauen Sie sich das mal an Beispiel .

0 Stimmen

Hier ist eine weitere wichtige Beispiel .

4voto

Adam L Davis Punkte 269

Das ist ein bisschen zu kompliziert. Anstatt Sekunden, Minuten und Stunden zu verwenden, könnten Sie einfach java.util.Date und java.text.SimpleDateFormat für die Anzeige der vergangenen Zeit verwenden.

start = new Date(); // time right now
sdf = new SimpleDateFormat("hh:mm:ss");

Dann später, um zu zeigen, wie viel Zeit vergangen ist:

Date now = new Date();
sdf.format(new Date(now.getTime() - start.getTime()); //create a date based on time passed

Dies hat die gleiche Wirkung und ist viel klarer und übersichtlicher.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X