import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;



/////////////////////////////////////////////////////////// class Sleepy
class Sleepy {


    //================================================== method main
    public static void main(String[] args) {
        JFrame windo = new JFrame("Sleepy");
        windo.getContentPane().add(new SleepyPanel());
        windo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        windo.pack();
        windo.show();
    }//end main

}//end class Sleepy




////////////////////////////////////////////////////// class SleepyPanel
class SleepyPanel extends JPanel {
    private Sleeper face = new Sleeper();



    //================================================== constructor
    SleepyPanel() {
        //--- Create some buttons
        JButton awakeButton = new JButton("Awake");
        awakeButton.addActionListener(
            new ActionListener() {


                //========================================= listener
                public void actionPerformed(ActionEvent e) {
                    face.setAwake(true);
                }//end listener

            }
        );
        JButton asleepButton = new JButton("Asleep");
        asleepButton.addActionListener(
            new ActionListener() {


                //========================================= listener
                public void actionPerformed(ActionEvent e) {
                    face.setAwake(false);
                }//end listener

            }
        );

        //--- Put the buttons in a flowlayout panel
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout());
        buttonPanel.add(awakeButton);
        buttonPanel.add(asleepButton);

        //--- Set layout and add buttons and face
        this.setLayout(new BorderLayout());
        this.add(buttonPanel, BorderLayout.NORTH);
        this.add(face, BorderLayout.CENTER);
    }//end constructor

}//endclass SleepyPanel




////////////////////////////////////////////////////////// class Sleeper
class Sleeper extends JPanel {


    //------------------------------------------- instance variables
    private boolean awake = false;  // show face awake or asleep
    //end instance variables




    //================================================== constructor
    Sleeper() {
        this.setBackground(Color.lightGray);
        this.setPreferredSize(new Dimension(400, 400));  // size
    }//end constructor




    //======================================== logic method setAwake

    public void setAwake(boolean awakeAsleep) {
        awake = awakeAsleep; // remember expression on face
        repaint();           // redraw it with new value
    }//end setAwake




    //================================== logic method paintComponent
    public void paintComponent(Graphics g) {
        super.paintComponent(g);  // MUST be first line

        //--- draw head
        g.setColor(Color.yellow);
        g.fillOval(8, 8, 384, 384);

        //--- draw eyes
        g.setColor(Color.black);
        if (awake) {
            g.fillOval(100, 150, 50, 100);  // left eye
            g.fillOval(250, 150, 50, 100);  // right eye
        }
        else {
            g.fillRect(50 , 200, 100, 4); // left eye
            g.fillRect(250, 200, 100, 4); // left eye
        }
    }//end paintComponent

}//endclass Sleeper


