Modify the following source code so that when the mouse is clicked within 30 pixels of the middle of the smiley face it changes color. It will alternate between the yellow and red smiley faces. two images have been given to you , redSmiley.gif and happyFace.gif to get started. Just for fun: Create more than 2 colors of smiley faces and rotate through the images changing each time the mouse is clicked within the threshold. Use different images other than smiley faces, change images each time the mouse is clicked within the threshold. Add a sound each time the image changes. Have the image slow down, if it has been more than x number of seconds since the image has changed. Solution import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import javax.swing.*; public class ChangeImageOnClick { private void showContentsImage() { JFrame driver = new JFrame(\"Move pointer on Image\"); driver.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); CustomPanel contentPane = new CustomPanel(); driver.setContentPane(contentPane); driver.pack(); driver.setLocationByPlatform(true); driver.setVisible(true); } public static void main(String\\u005B\\u005D args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new ChangeImageOnClick().showContentsImage(); } }); } } class CustomPanel extends JComponent { private final int SIZE = 50; private int imageX = 100; private int imageY = 100; private int imageIndex; private ImageIcon image; private ImageIcon firstImage; private ImageIcon secondImage; private java.net.URL url; private Rectangle boundsForMouse; public CustomPanel() { image = new ImageIcon(); try { url = new java.net.URL(\"please mention url location of imaage\"); firstImage = new ImageIcon(url); url = new java.net.URL(\"please mention url location of image\"); secondImage = new ImageIcon(url); } catch(Exception e) { e.printStackTrace(); } imageIndex = 1; image.setImage(firstImage.getImage()); boundsForMouse = new Rectangle(imageX - 30, imageY - 30, firstImage.getIconWidth() + 60, firstImage.getIconHeight() + 60); setOpaque(true); addMouseListener(new MousePosition()); } private int setImage(int counter) { System.out.println(\"Image Index : \" + counter); if (counter == 1) { image = new ImageIcon(); image.setImage(secondImage.getImage()); boundsForMouse = new Rectangle(imageX - 30, imageY - 30, secondImage.getIconWidth() + 60, secondImage.getIconHeight() + 60); repaint(); counter++; return (counter); } else if (counter == 2) { image = new ImageIcon(); image.setImage(firstImage.getImage()); boundsForMouse = new Rectangle(imageX - 30, imageY - 30, firstImage.getIconWidth() + 60, firstImage.getIconHeight() + 60); repaint(); return (--counter); } return 1; } @Override public Dimension getPreferredSize() { return (new Dimension(500, 500)); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.clearRect(0, 0, getWidth(), getHeight()); g.drawImage(image.getImage(), imageX, imageY, null); } private cl.