package anonymousInnerClass;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

/**
 * Ten program demonstruje zastosowanie anonimowych klas wewnętrznych.
 * @version 1.11 2015-05-12
 * @author Cay Horstmann
 */
public class AnonymousInnerClassTest
{
   public static void main(String[] args)
   {
      var clock = new TalkingClock();
      clock.start(1000, true);

      // Niech program działa, dopóki użytkownik nie wciśnie przycisku OK.
      JOptionPane.showMessageDialog(null, "Zamknąć program?");
      System.exit(0);
   }
}

/**
 * Zegar drukujący informacje o czasie w równych odstępach czasu.
 */
class TalkingClock
{
   /**
    * Uruchamia zegar.
    * @param interval odstęp czasu pomiędzy kolejnymi komunikatami (w milisekundach)
    * @param beep wartość true oznacza, że dźwięk ma być odtwarzany
    */
   public void start(int interval, boolean beep)
   {
      ActionListener listener = new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               System.out.println("Kiedy usłyszysz dźwięk, będzie godzina " + Instant.ofEpochMilli(event.getWhen()));
               if (beep) Toolkit.getDefaultToolkit().beep();
            }
         };
      var timer = new Timer(interval, listener);
      timer.start();
   }
}
