import java.awt.*; import java.awt.event.*; public class Smiley implements ActionListener { Frame f; SmileyFace sf; Button toggle; public static void main(String[] argv) { new Smiley(); } public Smiley() { f=new Frame("Mr. Smiley"); f.addNotify(); sf=new SmileyFace(); toggle=new Button("Toggle"); toggle.addActionListener(this); f.setSize(640,480); f.add(toggle,BorderLayout.SOUTH); f.add(sf,BorderLayout.CENTER); f.setVisible(true); } public void actionPerformed(ActionEvent ae) { sf.toggle(); } public static class SmileyFace extends Component { boolean smile=true; Image img; static int orient = 0; public SmileyFace() { setSize(400,400); } private void paintSmile() { Graphics g=img.getGraphics(); g.setColor(Color.black); g.fillRect(0,0,400,400); g.setColor(Color.yellow); g.fillOval(0,0,400,400); g.fillOval(10,10,10,10); g.setColor(Color.black); g.fillOval(100,100,50,50); g.fillOval(250,100,50,50); if (smile) g.drawArc(150,250,100,100,180,180); else g.drawArc(150,250,100,100,0,180); repaint(); } public void toggle() { smile=!smile; paintSmile(); } public void paint(Graphics g) { if (img != null) { switch (orient++) { case 0: g.drawImage(img,0,0,400,400,0,0,400,400,null); // NORMAL break; case 1: g.drawImage(img,400,0,0,400,0,0,400,400,null); // flip horizontal break; case 2: g.drawImage(img,0,0,400,400,400,0,0,400,null); // flip horizontal break; case 3: g.drawImage(img,400,0,0,400,400,0,0,400,null); // NORMAL break; case 4: g.drawImage(img,0,400,400,0,0,0,400,400,null); // flip vertical break; case 5: g.drawImage(img,0,0,400,400,0,400,400,0,null); // flip vertical break; case 6: g.drawImage(img,0,400,400,0,0,400,400,0,null); // NORMAL break; case 7: g.drawImage(img,400,400,0,0,0,0,400,400,null); // flip both break; case 8: g.drawImage(img,0,0,200,400,null); // shrink horizontal break; case 9: g.drawImage(img,0,0,400,200,null); // shrink vetical break; case 10: g.drawImage(img,0,0,200,200,null); // shrink both break; case 11: g.drawImage(img,0,0,600,400,null); // expand horizontal break; case 12: g.drawImage(img,0,0,400,600,null); // expand vetical break; case 13: g.drawImage(img,0,0,600,600,null); // expand both break; case 14: orient = 0; g.drawImage(img,0,0,400,400,0,0,200,200,null); // mag left corner break; } } else { img=createImage(400,400); paintSmile(); } } public void update(Graphics g) { g.drawImage(img,0,0,null); } } }