Mein Timer erstellt ein neues Fenster mit nicht funktionierenden Tasten, wenn ich den Startknopf drücke. Die Änderung der Anzeige erfolgt nur im neuen Fenster, aber die Start/Stop-Funktionalität funktioniert nur im alten Fenster. Ich bin mir nicht sicher, was hier vor sich geht. Kann mir jemand helfen, herauszufinden, wie ich verhindern kann, dass beim Start ein neues Fenster erstellt wird?Timer erzeugt ein neues Fenster beim Start
Ich habe drei Klassen, mit denen ich arbeite. Der erste führt den Timer aus.
package timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import java.awt.event.*;
public class TaskTimer extends TaskTimerWindow {
int seconds = 0;
int minutes = 0;
int hours = 0;
final int UNIT = 1000;
boolean stopped = false;
Timer timer;
public TaskTimer() {
ActionListener go = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
count();
}
};
timer = new Timer(UNIT, go);
timer.start();
}
public void resume() {
if(stopped) {
seconds = 0;
minutes = 0;
hours = 0;
}
}
public void end() {
timer.stop();
}
public void count() {
if(seconds < 59) {
seconds++;
} else if(minutes < 59) {
seconds = 0;
minutes++;
} else {
seconds = 0;
minutes = 0;
hours++;
}
changeDisplay(String.format("%02d", hours) + ":"
+ String.format("%02d", minutes) + ":"
+ String.format("%02d", seconds));
}
}
Die zweite erstellt und aktualisiert das Display.
package timer;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TaskTimerWindow extends JFrame {
JLabel timeDisplay;
JButton start, stop, pause;
public TaskTimerWindow() {
JPanel timerWindow = new JPanel();
JPanel buttonSpace = new JPanel();
timeDisplay = new JLabel("00:00:00");
timeDisplay.setHorizontalAlignment((int) CENTER_ALIGNMENT);
timeDisplay.setFont(new Font("Arial", Font.PLAIN, 48));
timeDisplay.setBackground(Color.WHITE);
timerWindow.add(timeDisplay);
start = new JButton("Start");
stop = new JButton("Stop");
pause = new JButton("Pause");
buttonSpace.add(start);
buttonSpace.add(stop);
buttonSpace.add(pause);
getContentPane().add(timerWindow, BorderLayout.NORTH);
getContentPane().add(buttonSpace);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLocationRelativeTo(null);
setTitle("Task Timer");
pack();
}
public JLabel getText() {
return timeDisplay;
}
public void changeDisplay(String time) {
getText().setText(time);
}
}
Und der dritte ist der Controller.
package timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ControlTimer {
boolean stopped = false;
boolean paused = false;
TaskTimer timer;
public ControlTimer() {
TaskTimerWindow window = new TaskTimerWindow();
window.start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
timer = new TaskTimer();
}
});
window.stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopped = true;
timer.end();
}
});
window.pause.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
paused = true;
}
});
}
}
So brauchen Sie Ihre vorherigen Timer Stoppen Sie, wenn neu gestartet wird –
Hitting Start sollte den Timer im Allgemeinen starten.Ich brauche nicht mehrere Timer. – Kendra