如何在Java GUI中重置计时器并在停止后显示消息
你好,好日子,我想创建一个“重置按钮”,我的计时器将重置。我创建了一个新按钮,并将其命名为“reset”,我使用代码“tm2.restart();”,但它在我创建的新按钮中不起作用。这是我的代码:如何在Java GUI中重置计时器并在停止后显示消息,java,swing,user-interface,timer,Java,Swing,User Interface,Timer,你好,好日子,我想创建一个“重置按钮”,我的计时器将重置。我创建了一个新按钮,并将其命名为“reset”,我使用代码“tm2.restart();”,但它在我创建的新按钮中不起作用。这是我的代码: import javax.swing.Timer; public class deploy extends JFrame { private int seconds; private SimpleDateFormat df; private boolean isRunning; privat
import javax.swing.Timer;
public class deploy extends JFrame {
private int seconds;
private SimpleDateFormat df;
private boolean isRunning;
private JLabel lblTimer1;
private JButton btnStart1;
public deploy() {
lblTimer1 = new JLabel("New label");
lblTimer1.setForeground(Color.WHITE);
lblTimer1.setFont(new Font("Tahoma", Font.PLAIN, 20));
lblTimer1.setBounds(100, 231, 94, 16);
contentPane.add(lblTimer1);
Timer tm2 = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setTimer();
seconds++;
}
});
btnStart1 = new JButton("Start");
btnStart1.setBackground(Color.LIGHT_GRAY);
btnStart1.setForeground(Color.BLUE);
btnStart1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(isRunning) {
tm2.stop();
btnStart1.setText("Start");
}else {
tm2.start();
btnStart1.setText("Stop");
}
isRunning = !isRunning;
}
});
我的计时器格式为“SimpleDateFormat”(00:00:00),因为我正在创建一个“cybercafe管理应用程序”,客户将进入并记录他/她的时间,直到他/她注销并显示一条消息,说明他/她将被支付的金额。请帮忙。感谢您查看代码,请毫不犹豫地询问不清楚的地方:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;
public class Deploy extends JFrame {
private int seconds;
private SimpleDateFormat df;
private JLabel lblTimer;
private Timer timer;
private JButton startButton;
public Deploy() {
JPanel contentPane = new JPanel();
contentPane.setBackground(Color.DARK_GRAY);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout());
lblTimer = new JLabel();
lblTimer.setForeground(Color.WHITE);
lblTimer.setFont(new Font("Tahoma", Font.PLAIN, 20));
lblTimer.setPreferredSize(new Dimension(100,30));
contentPane.add(lblTimer,BorderLayout.NORTH);
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setTimer();
seconds++;
}
});
JPanel buttonsPanel = new JPanel();
contentPane.add(buttonsPanel, BorderLayout.SOUTH);
startButton = new JButton("Start");
startButton.setBackground(Color.LIGHT_GRAY);
startButton.setForeground(Color.BLUE);
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(timer.isRunning()) {
timer.stop();
startButton.setText("Start");
}else {
timer.start();
startButton.setText("Stop");
}
}
});
startButton.setPreferredSize(new Dimension(100,30));
buttonsPanel.add(startButton);
JButton resetButton = new JButton("Reset");
resetButton.setBackground(Color.LIGHT_GRAY);
resetButton.setForeground(Color.RED);
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
resetTimer();
}
});
resetButton.setPreferredSize(new Dimension(100,30));
buttonsPanel.add(resetButton);
df = new SimpleDateFormat("HH:mm:ss"); // HH for 0-23
df.setTimeZone(TimeZone.getTimeZone("GMT"));
resetTimer();
pack();
setVisible(true);
}
private void setTimer() {
Date d = new Date(seconds * 1000L);
String time = df.format(d);
lblTimer.setText(time);
}
private void resetTimer() {
if(timer.isRunning()) {
timer.stop();
}
startButton.setText("Start");
seconds = 0;
setTimer();
}
public static void main(String[] args) {
new Deploy();
}
}
我在代码中没有看到
tm2.restart()
。。。请提供一个。顺便说一句,用计时器跟踪时间跨度并不是最好的主意。。。您只需记录2个时间戳(登录时、注销时)并在需要时计算差异。@Fildor我不以tm2.restart()格式包含代码;我删除是因为它不起作用了……啊,好吧。那么我应该使用什么代码呢?我是Java GUI新手……您总是可以计算从现在到过去某个时间的实际时间跨度。有不同的方法可以在显示经过时间的标签上实现第二次更新。