Java: Example - Sleepy Source
This program combines components (eg, buttons) and drawing.
The Sleeper panel is used for graphics. In addition
to its public constructor, it also has a public method,
setAwake(...) , that sets the state of the face to
either asleep or awake. This method is called to cause the
face to change.
|
// Sleepy.java - Face with buttons -- Fred Swartz 2002-11-15 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
Sections that are colored orange are executed at run time.