Прежде всего привет! Это мой первый пост в stackoverflow! Это моя вторая попытка программирования чего-то на Java и первая попытка с gui.javax.swing.timer вычитает столько, сколько я нажимаю на кнопку запуска
У меня на самом деле две проблемы. Первая из них - программа, а вторая - часть кода.
Как программа должна работать:
При нажатии старт он отсчитывает с 01:00 до 00:00 каждую минуту (01:00 -> 00:59 -> 00:58). Когда вы нажимаете стоп, он перестает считать вниз (duh), и когда вы снова нажмете старт, он начинается с 01:00, как в первый раз.
Задача программы:
С учетом сказанного. Это работает только при первом нажатии. Когда я нажимаю старт несколько раз, он вычитает это количество раз из часов. Нажимается 2 раза (01:00 -> 00:58 -> 00:56). Нажимали 4 раза (01:00 -> 00:56 -> 00:52). и т. д. Это явно не должно происходить.
Понимание проблемы:
Я с трудом понять, почему таймер требует ActionListener и почему это работает, когда вы используете «нулевой». В некоторых случаях он также работает при использовании «этого» (чего я также не понимаю).
Java Swing Timer Documentation
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CountdownClock extends JFrame
{
private int oneSecond = 1000; //Milliseconds
private Timer timer = new Timer(oneSecond * 60, null);
private int timerCount = 59;
public static void main(String args[])
{
new CountdownClock();
}
CountdownClock()
{
this.getContentPane().setLayout(null);
this.setBounds(800, 450, 300, 125);
final JLabel countdownLabel = new JLabel("01:00");
countdownLabel.setBounds(110, 10, 125, 30);
countdownLabel.setFont(new Font("Serif", Font.PLAIN, 30));
JButton startButton = new JButton("Start");
startButton.setBounds(10, 50, 125, 30);
startButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
timer.setRepeats(true);
timer.stop();
countdownLabel.setText("01:00");
timerCount = 59;
timer.start();
timer.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if (timerCount == 0)
{
timer.stop();
countdownLabel.setText("00:00");
timerCount = 59;
}
else if (timerCount <= 9)
{
countdownLabel.setText("00:0" + String.valueOf(timerCount));
timerCount = timerCount - 1;
}
else
{
countdownLabel.setText("00:" + String.valueOf(timerCount));
timerCount = timerCount - 1;
}
}
});
}
});
JButton stopButton = new JButton("Stop");
stopButton.setBounds(150, 50, 125, 30);
stopButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
timer.stop();
countdownLabel.setText("01:00");
timerCount = 59;
}
});
add(countdownLabel);
add(startButton);
add(stopButton);
setVisible(true);
}
}
Редактировать: Спасибо! Я понимаю, почему он это делает сейчас! У меня было прозрение, когда я читал ваш ответ так же, как в пятый раз, и теперь я вижу, насколько глупой и простой была моя проблема. Должен был подумать об этом давно с помощью «Добавить» в AddActionListener! – BinaryCode64
+1, @ BinaryCode64, вы должны «принять» этот ответ, если он помог решить вашу проблему. – camickr
Готово. Я думаю... – BinaryCode64