Используйте делегирование, добавьте в метод метода begin () для вашего класса делегата, который соответствует интерфейсу, например
interface DelegationInterface {
void countdownTick(int i);
}
в ThreadQuizCountdown:
добавить приватное поле и изменить метод начала:
private DelegationInterface delegate;
public void begin(DelegationInterface delegate) {
this.delegate = delegate;
myThread.start();
}
далее, изменить run (): (обратите внимание, что мы вызываем обратный отсчет в критической секции, в этом случае это не имеет значения, но если у вас будет много таймеров, это поможет избежать проблем)
public void run() {
....
myThread.sleep(1000);
if (delegate != null) {
synchronized(delegate) {
delegate.countdownTick(i);
}
}
....
}
И, наконец, добавьте реализацию интерфейса на панель:
public class PanelQuizCountdown extends JPanel implements ActionListener, DelegationInterface {
....
public void countdownTick(int i) {
// place i to to timeField
}
....
}
Вот и все!