Modify the attached version of the face with the winking eye. This version has t
ID: 3566023 • Letter: M
Question
Modify the attached version of the face with the winking eye. This version has the eye wink when the user clicks the button. Save as the program as ex145.java and change the program so the eye will continue to wink on its own. Follow the comments to modify the code. It will lesson flicker by only redrawing the eye that winks and not the background, face, or other eye. Add a static sleep so the face does not wink too fast. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ex1011c extends JApplet implements ActionListener { // get rid of all winkbutton code JButton winkbutton = new JButton("Wink At You"); boolean wink = false, first = true; Container c; public void init() { c = getContentPane(); c.setLayout(new FlowLayout()); c.setBackground(Color.blue); winkbutton.setForeground(Color.cyan); c.add(winkbutton); winkbutton.addActionListener(this); } // get rid of actionPerformed public void actionPerformed(ActionEvent e) { wink = !wink; repaint(); } public void paint(Graphics g) { /* if first time, draw the face and non winking eye, set first to false */ super.paint(g); g.setColor(Color.yellow); g.fillOval(50, 50, 100, 100); g.setColor(Color.black); g.fillOval(85, 80, 10, 20); /* cover just the eye that winks (if winking or not, but do not cover anything else), switch the wink boolean */ // draw the full eye or winking eye if (wink) g.fillOval(105, 88, 10, 5); else g.fillOval(105, 80, 10, 20); // go to sleep for a second // call repaint } // override update to lesson flicker }
Explanation / Answer
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class Blinky { public static void main(String[] args) { new Blinky(); } public Blinky() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new BlinkPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class BlinkPane extends JPanel { private boolean wink; public BlinkPane() { Timer timer = new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { wink = !wink; repaint(); } }); timer.start(); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); int x = (getWidth() - 10) / 2; int eyeHeight = 20; if (wink) { eyeHeight = 5; } int y = (getWidth() - eyeHeight) / 2; g.fillOval(x, y, 10, eyeHeight); g2d.dispose(); } } }
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.