import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class MyTimer extends JFrame implements ActionListener {
public static void main(String[] args) {
final MyTimer mt = new MyTimer();
mt.pack();
mt.setLocationRelativeTo(null);
mt.setVisible(true);
}
final Font _font = new Font("Monospaced", Font.BOLD, 64);
final JLabel _label = new JLabel("0:00.0");
final Timer _timer;
long _startAt;
public MyTimer() {
super();
_timer = new Timer(100, this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
final Container cpane = getContentPane();
cpane.setLayout(new BorderLayout());
_label.setFont(_font);
_label.setHorizontalAlignment(SwingConstants.RIGHT);
cpane.add(_label, BorderLayout.CENTER);
final JToggleButton btn = new JToggleButton("START");
btn.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
if (btn.isSelected()) {
btn.setText("STOP");
start();
} else {
btn.setText("START");
stop();
}
}
});
cpane.add(btn, BorderLayout.SOUTH);
}
void start() {
_startAt = System.currentTimeMillis();
_timer.start();
}
void stop() {
_timer.stop();
}
private static String zero(final long v, final int n) {
final String s = String.valueOf(v);
final StringBuilder rtn = new StringBuilder();
final int left = n - s.length();
while (rtn.length() < left) {
rtn.append('0');
}
rtn.append(s);
return rtn.toString();
}
private String hoge(final long l) {
final long d = (l - _startAt) / 1000;
final long d2 = ((l - _startAt) / 10) % 10;
final long min = d / 60;
final long sec = d % 60;
final String text = min + ":" + zero(sec, 2);
final String x = zero(d2, 1);
return text + "." + x;
}
public void actionPerformed(final ActionEvent e) {
_label.setText(hoge(System.currentTimeMillis()));
}
}