该计时器应用程序允许用户输入一个名称和倒计时时间,并启动、停止和重置计时器。当用户启动计时器时,程序会启动一个单独的线程来执行倒计时功能,并在文本框中显示剩余时间。当时间减少到0时,计时器将停止,并且所有按钮将被设置为可用状态,以便用户重新设置计时器。此外,该应用程序还包括一些逻辑,用于验证用户输入的时间格式,并在需要时显示错误消息。总之,该计时器应用程序提供了一个简单但实用的计时器,可以用于各种计时需求。
package TimerSe;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TimerSec extends JFrame implements ActionListener {
private JTextField nameField, timeField;
private JTextArea logArea;
private JButton startButton, stopButton, resetButton;
private int minutes = 0, seconds = 0, mminutes = 0, mseconds = 0;
private boolean running = false;
public TimerSec() {
setTitle("Timer");
setSize(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation((1920 - 800) / 2, (1080 - 600) / 2);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 2));
JLabel nameLabel = new JLabel("Name:");
nameField = new JTextField();
JLabel timeLabel = new JLabel("Time (mm:ss):");
timeField = new JTextField();
logArea = new JTextArea(5, 20);
logArea.setEditable(false);
startButton = new JButton("Start");
startButton.addActionListener(this);
stopButton = new JButton("Stop");
stopButton.addActionListener(this);
resetButton = new JButton("Reset");
resetButton.addActionListener(this);
panel.add(nameLabel);
panel.add(nameField);
panel.add(timeLabel);
panel.add(timeField);
panel.add(new JLabel());
panel.add(new JLabel());
panel.add(startButton);
panel.add(stopButton);
panel.add(resetButton);
panel.add(new JLabel());
getContentPane().add(panel, BorderLayout.NORTH);
getContentPane().add(new JScrollPane(logArea), BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == startButton) {
if (!running) {
try {
minutes = Integer.parseInt(timeField.getText().split(":")[0]);
seconds = Integer.parseInt(timeField.getText().split(":")[1]);
mminutes = minutes;
mseconds = seconds;
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Invalid time format. Please enter mm:ss.");
return;
}
if (minutes < 0 || seconds < 0 || seconds >= 60) {
JOptionPane.showMessageDialog(null, "Invalid time format. Please enter mm:ss.");
return;
}
running = true;
startButton.setEnabled(false);
stopButton.setEnabled(true);
resetButton.setEnabled(false);
nameField.setEditable(false);
timeField.setEditable(false);
logArea.append(nameField.getText() + ": " + minutes + " minutes " + seconds + " seconds\n");
Thread t1 = new Thread(new Runnable() {
public void run() {
while (running && minutes >= 0 && seconds >= 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (seconds == 0) {
if (minutes == 0) {
running = false;
startButton.setEnabled(true);
stopButton.setEnabled(false);
resetButton.setEnabled(true);
nameField.setEditable(true);
timeField.setEditable(true);
break;
} else {
minutes--;
seconds = 59;
}
} else {
seconds--;
}
timeField.setText(String.format("%02d:%02d", minutes, seconds));
}
}
});
t1.start();
}
} else if (source == stopButton) {
running = false;
startButton.setEnabled(true);
stopButton.setEnabled(false);
resetButton.setEnabled(true);
nameField.setEditable(true);
timeField.setEditable(true);
} else if (source == resetButton) {
running = false;
minutes = mminutes;
seconds = mseconds;
timeField.setText(String.format("%02d:%02d", minutes, seconds));
startButton.setEnabled(true);
stopButton.setEnabled(false);
resetButton.setEnabled(false);
nameField.setEditable(true);
timeField.setEditable(true);
}
}
}
package TimerSe;
public class Run {
public static void main(String[] args) {
TimerSec TimerSec = new TimerSec();
TimerSec.setVisible(true);
}
}
|