【发布时间】:2018-05-18 09:57:18
【问题描述】:
我编写了一个具有三个功能的简单秒表。首先,我有一个启动秒表的开始按钮,一个暂停秒表的暂停按钮,最后一个重置整个秒表的重置按钮。
当我按下暂停按钮时,秒表会暂停,比如 10.0 秒。当我恢复秒表(再次按下开始按钮)时,秒表不会从 10.0 秒开始恢复。它从我暂停的时间和当前时间恢复。例如,如果我暂停 5 秒并点击恢复,秒表会从 15.0 秒开始。
我知道Swing.Timer 中没有实际的暂停功能。有没有办法解决这个问题,让秒表恢复正常?
任何建议都将不胜感激。
代码:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.Duration;
import java.time.Instant;
import javax.swing.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GuiStopwatch {
public static void main(String[] args) {
JFrame frame = new JFrame("Stopwatch");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
JPanel panel = new JPanel();
panel.setLayout(null);
JButton startbtn = new JButton("START");
JButton pausebtn = new JButton("PAUSE");
JButton reset = new JButton("RESET");
JLabel time = new JLabel("Time shows here");
panel.add(startbtn);
panel.add(pausebtn);
panel.add(reset);
panel.add(time);
startbtn.setBounds(50, 150, 100, 35);
pausebtn.setBounds(50, 200, 100, 35);
reset.setBounds(50, 250, 100, 35);
time.setBounds(50, 350, 100, 35);
time.setBackground(Color.black);
time.setForeground(Color.red);
frame.add(panel);
Timer timer = new Timer(1,new ActionListener() {
Instant start = Instant.now();
@Override
public void actionPerformed(ActionEvent e) {
time.setText( Duration.between(start, Instant.now()).getSeconds() + ":" + Duration.between(start, Instant.now()).getNano() );
}
});
startbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timer.start();
}
});
pausebtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
}
});
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
time.setText("0:0");
}
});
【问题讨论】:
-
所以,“基本”概念是 - 您需要跟踪秒表的总损坏时间,即从它第一次启动到它暂停的时间。恢复后,您会将“新运行”时间添加到之前的计数中
-
panel.setLayout(null);