Question 1
(a)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChooseColor extends JFrame implements ActionListener {
    private JLabel label = new JLabel();
    private JPanel panel = new JPanel(new GridLayout(1,0));
    private JButton[] buttons= new JButton[3];
    
    private Container contentPane = getContentPane(); 
   
    public ChooseColor() {
        buttons[0] = new JButton("Red");
        buttons[0].setBackground(Color.red);
        buttons[1] = new JButton("Green");
        buttons[1].setBackground(Color.green);
        buttons[2] = new JButton("Blue");
        buttons[2].setBackground(Color.blue);
        label.setOpaque(true);
        contentPane.add(label);
        for(int i = 0; i < 3; i++) {
            panel.add(buttons[i]);
            buttons[i].addActionListener(this);
        }
        
        contentPane.add(panel, BorderLayout.SOUTH);
    }
    
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("Red")) {
            label.setBackground(Color.red);
        } else if(e.getActionCommand().equals("Green")) {
            label.setBackground(Color.green);
        } else {
            label.setBackground(Color.blue);
        }
    }
    
     public static void main(String[] args) {
        JFrame f = new ChooseColor();
        f.setSize(250,150);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

(b)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChooseColor extends JFrame {
    private JLabel label = new JLabel();
    private JPanel panel = new JPanel(new GridLayout(1,0));
    private JButton[] buttons= new JButton[3];
    
    private Container contentPane = getContentPane(); 
   
    public ChooseColor() {
        buttons[0] = new JButton("Red");
        buttons[0].setBackground(Color.red);
        buttons[0].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                label.setBackground(Color.red);
            }
        });
        
        buttons[1] = new JButton("Green");
        buttons[1].setBackground(Color.green);
        buttons[1].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                label.setBackground(Color.green);
            }
        });
        
        buttons[2] = new JButton("Blue");
        buttons[2].setBackground(Color.blue);
        buttons[2].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                label.setBackground(Color.blue);
            }
        });
        
        label.setOpaque(true);
        contentPane.add(label);
        for(int i = 0; i < 3; i++) {
            panel.add(buttons[i]);
        }
        
        contentPane.add(panel, BorderLayout.SOUTH);
    }
    
    
     public static void main(String[] args) {
        JFrame f = new ChooseColor();
        f.setSize(250,150);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
Question 2
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Click extends JFrame implements ActionListener {
    JButton[] buttons = new JButton[3];
    Container contentPane = getContentPane();
    
    public Click() {
	contentPane.setLayout(new GridLayout(0,1));
	for(int i = 0; i < buttons.length; i++) {
	    buttons[i] = new JButton("0");
	    buttons[i].addActionListener(this);
	    contentPane.add(buttons[i]);
	}
	
    }
    
    public void actionPerformed(ActionEvent e) {
	// we can use e.getActionCommand
	// try to show you different methods of doing it
	JButton button = (JButton)e.getSource();
	int num = Integer.parseInt(button.getText());
	button.setText(Integer.toString(num+1));
    }
    
   public static void main(String[] args) {
        JFrame f = new Click();
	f.pack();
	f.setVisible(true);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
	
}

Question 3
(a)

(b)

Question 4
import java.awt.*;
   import javax.swing.*;
   import java.awt.event.*;
   
   public class WhoAmI extends JFrame implements ActionListener {
       private JLabel topLabel = new JLabel();
       private JPanel middlePanel = new JPanel(new GridLayout(2,5)) ;
       private JLabel bottomLabel = new JLabel();
       private JButton[] buttons;
      private Container contentPane = getContentPane();
      private String[] names = {"Apu", "Bart", "Burns", "Homer", "Krusty", "Lisa", "Maggie", "Marge", "Moe", "Ned"};
      private String who;
      private int trial = 0;
      private int correct = 0;
      
      public WhoAmI() {
          buttons = new JButton[names.length];
          for(int i = 0; i < buttons.length; i++) {
              buttons[i] = new JButton(new ImageIcon("simpson/" + names[i] + ".gif"));
              buttons[i].setActionCommand(names[i]);
              buttons[i].addActionListener(this);
              middlePanel.add(buttons[i]);
          }
          
          contentPane.add(topLabel, BorderLayout.NORTH);
          contentPane.add(bottomLabel, BorderLayout.SOUTH);
          contentPane.add(middlePanel);
          setWho();
          topLabel.setText("Who is " + who + "?");
          bottomLabel.setText("Num of trials : " + trial + "     " + "Correct answers : " + correct );
      }
      
      public void setWho() {
          who = names[(int)(names.length*Math.random())];
      }
      
      public void actionPerformed(ActionEvent e) {
          if(e.getActionCommand().equals(who)) {
              correct++;
              trial++;
              setWho();
              topLabel.setText("You are right! Next question: who is " + who + "?");
          } else {
              trial++;
              setWho();
              topLabel.setText("You are wrong! Next question: who is " + who + "?");
          }
          bottomLabel.setText("Num of trials : " + trial + "     " + "Correct answers : " + correct );
      }
      
      public static void main(String[] args) {
          JFrame f = new WhoAmI();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.setSize(280,180);
          f.setVisible(true);
      }
  }
Question 5
a)

b)
A : increase the number on display by 3.
B : increase the number on display by 2.
C : reset the number on display to 3.
c)
8
d)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ActionTest2 extends JFrame {
    JButton buttonA = new JButton("A");
    JButton buttonB = new JButton("B");
    JButton buttonC = new JButton("C");
    JLabel display = new JLabel("0", JLabel.CENTER);
    Container contentPane = getContentPane();
    
    public ActionTest2() {
        contentPane.add(buttonA, BorderLayout.CENTER);
        contentPane.add(buttonB, BorderLayout.EAST);
        contentPane.add(buttonC, BorderLayout.WEST);
        contentPane.add(display, BorderLayout.SOUTH);
        
        buttonA.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                      int num = Integer.parseInt(display.getText()) + 3;
                      display.setText("" + num);
              }
       });
        
     
      buttonB.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                      int num = Integer.parseInt(display.getText()) + 2;
                      display.setText("" + num);
              }
       });
        
       buttonC.addActionListener( new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               display.setText("" + 3);
           }
       });        
    }
    
    public static void main(String[] args) {
        ActionTest2 f = new ActionTest2();
        f.setSize(200,100);
        f.setVisible(true);
    }
}