Цифровые часы, с настройкой времени
Я написал 2 класса. В первом создается диалоговое окно с 3-мя JTextField, в которые нужно вписать час, минуту и секунду. Во втором классе открывается окно Jframe, выводящее сами часы в формате чч:мм:сс. Проблема заключается в том, что часы выводятся на экран только один раз, а не каждую секунду с изменениями. Внизу я прикрепил написанный код, помогите пожалуйста.
Первый класс:
package Clock;
import javax.swing.*;
import javax.swing.plaf.FontUIResource;
import javax.swing.text.StyleContext;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import javax.swing.WindowConstants;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
public class Dialog extends JFrame {
public static int clock1;
public static int clock2;
public static int clock3;
private JLabel TextHour;
private JLabel TextMinute;
private JLabel TextSecond;
private JTextField hour;
private JTextField minute;
private JTextField second;
private JButton OKButton;
private JPanel rootPanel;
JLabel result = new JLabel("0");
int x = 0;
boolean programIsFail = false;
public Dialog() {
setSize(400, 250);
setContentPane(rootPanel);
setVisible(true);
OKButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
clock1 = Integer.parseInt(hour.getText());
} catch (NumberFormatException e1) {
programIsFail = true;
}
result.setText(String.valueOf(2 * clock1));
try {
clock2 = Integer.parseInt(minute.getText());
} catch (NumberFormatException e1) {
programIsFail = true;
}
result.setText(String.valueOf(2 * clock2));
try {
clock3 = Integer.parseInt(second.getText());
} catch (NumberFormatException e1) {
programIsFail = true;
}
result.setText(String.valueOf(2 * clock3));
if (clock1 < 0) {
programIsFail = true;
} else {
if (clock1 > 23) {
programIsFail = true;
}
}
if (clock2 < 0) {
programIsFail = true;
} else {
if (clock2 > 59) {
programIsFail = true;
}
}
if (clock3 < 0) {
programIsFail = true;
} else {
if (clock3 > 59) {
programIsFail = true;
}
}
if (programIsFail == true) {
JOptionPane.showMessageDialog(rootPanel, "Некорректный ввод!");
new Dialog();
} else {
dispose();
Clock c = new Clock();
c.Clock1();
}
dispose();
}
});
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Dialog();
}
}
И Второй:
package Clock;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.WindowConstants;
public class Clock {
public static void main(String[] args) {
new Dialog();
}
public static void Clock1(){
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
DigitalClock myClock = new DigitalClock();
f.add(myClock);
f.pack();
f.setVisible(true);
}
static class DigitalClock extends JPanel {
String stringTime;
int hour, minute, second;
String correctionHour = "";
String correctionMinute = "";
String correctionSecond = "";
public void setStringTime(String xyz) {
this.stringTime = xyz;
}
public int findMinimumBetweenTwoNumbers(int a, int b) {
return (a <= b) ? a : b;
}
DigitalClock() {
Timer t1 = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
second++;
if (second == 60) {
second = 0;
minute++;
}
if (minute == 60) {
minute = 0;
hour++;
}
if (hour == 24) {
hour = 0;
minute = 0;
second = 0;
}
setStringTime(correctionHour + hour + ":" + correctionMinute+ minute + ":" + correctionSecond + second);
repaint();
new DigitalClock();
}
});
t1.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
hour = Dialog.clock1;
minute = Dialog.clock2;
second = Dialog.clock3;
if (hour < 10) {
this.correctionHour = "0";
}
if (hour >= 10) {
this.correctionHour = "";
}
if (minute < 10) {
this.correctionMinute = "0";
}
if (minute >= 10) {
this.correctionMinute = "";
}
if (second < 10) {
this.correctionSecond = "0";
}
if (second >= 10) {
this.correctionSecond = "";
}
setStringTime(correctionHour + hour + ":" + correctionMinute+ minute + ":" + correctionSecond + second);
g.setColor(Color.BLACK);
int length = findMinimumBetweenTwoNumbers(this.getWidth(),this.getHeight());
Font myFont = new Font("SansSerif", Font.PLAIN, length / 5);
g.setFont(myFont);
g.drawString(stringTime, (int) length/6, length/2);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
Подозреваю, что ошибка где то во втором классе, но не знаю где. Заранее спасибо за помощь