私はJavaでカウントアップタイマーをやっています。私は次の例を見つけました: Java でブレークするカウントアップタイマーを作成し、それは正常に機能しています。しかし、非常に小さな時間応答を測定したいので、時間を"mm:ss:SSS" の形式で表示したいと思います。なので、1000ミリ秒になると1秒です。
いくつかの変更を加えましたが、ふりをした形式で時刻を表示することはできません。ミリ秒単位ではなく、秒単位で数値が表示され始めます。
私がフォローしている例よりも良い例があれば、それで問題ありません。
編集:より良いですが、まだうまく機能していません。カウントが遅すぎます (ここでの 1 分は実際の 2 分に相当します)。私のコードはここにあります:
public class Counter extends JFrame {
private static final String stop = "Stop";
private static final String start = "Start";
private final ClockListener clock = new ClockListener();
private final Timer timer = new Timer(1, clock);
private final JTextField tf = new JTextField(9);
public Counter()
{
timer.setInitialDelay(0);
JPanel panel = new JPanel();
tf.setHorizontalAlignment(JTextField.RIGHT);
tf.setEditable(false);
panel.add(tf);
final JToggleButton b = new JToggleButton(start);
b.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (b.isSelected())
{
timer.start();
b.setText(stop);
}
else
{
timer.stop();
b.setText(start);
}
}
});
panel.add(b);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(panel);
this.setTitle("Timer");
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private class ClockListener implements ActionListener
{
private int minutes;
private int seconds;
private int milliseconds;
@Override
public void actionPerformed(ActionEvent e)
{
SimpleDateFormat date = new SimpleDateFormat("mm.ss.SSS");
if (milliseconds == 1000)
{
milliseconds = 000;
seconds++;
}
if (seconds == 60) {
seconds = 00;
minutes++;
}
tf.setText(String.valueOf(minutes + ":" + seconds + ":" + milliseconds));
milliseconds++;
}
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run() {
Counter clock = new Counter();
clock.start();
}
});
}
}