package localInnerClass;

import java.awt.*;
import java.awt.event.*;
import java.time.*;

import javax.swing.*;

/**
 * Ten program demonstruje sposób użycia lokalnych klas wewnętrznych.
 * @version 1.02 2017-12-14
 * @author Cay Horstmann
 */
public class LocalInnerClassTest
{
   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
{
    /**
    * Włączanie zegara.
    * @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)
   {
      class TimePrinter implements 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 listener = new TimePrinter();
      var timer = new Timer(interval, listener);
      timer.start();
   }
}
