Today in lab: 

  play with the Greenfoot version of your project

  build the lab assignment for today 

Next week we have an exam. 

Since Wed and Thu we an employer panel in class, exam is in lab. 

Let's start the lab:

1. A JFrame is the most basic container. 

   By comparison a JComponent is mostly a component. 

   What about a JPanel? JPanel is not a Window. JFrame is. 

2. Attendance:

Noor, Andrew, Alex (just visiting), Trevor, Shea, Jack, Chia-Hsuan, Jing. 

3. I am getting started:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class LabEleven extends JFrame implements ActionListener {

  
  public void actionPerformed(ActionEvent e) {
    
  }
}

4. I need to add a main:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class LabEleven extends JFrame implements ActionListener {

  
  public void actionPerformed(ActionEvent e) {
    
  }
  public static void main(String[] args) {
    
  }
}

5. Next I want to create the frame:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class LabEleven extends JFrame implements ActionListener {
  public LabEleven() {
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 
  }
}

6. Let's add a JButton. 

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JPanel; 
import javax.swing.JButton; 

public class LabEleven extends JFrame implements ActionListener {
  public LabEleven() {
    JButton b = new JButton(); // the button (sandwich) 
    b.setText("Activate");
    JPanel p = new JPanel(); // the tray
    p.add( b ); // button on tray 
    this.add( p ); // tray goes out
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 
  }
}

7. Make the program react to the button:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JPanel; 
import javax.swing.JButton; 

public class LabEleven extends JFrame implements ActionListener {
  public LabEleven() {
    JButton b = new JButton(); // the button (sandwich) 
    b.addActionListener( this ); 
    b.setText("Activate");
    JPanel p = new JPanel(); // the tray
    p.add( b ); // button on tray 
    this.add( p ); // tray goes out
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    System.out.println("I have been called..." + e); 
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 
  }
}

8. Let's add two textfields so we can pick the data up from them:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import java.awt.Dimension; 

public class LabEleven extends JFrame implements ActionListener {
  public LabEleven() {
    JTextField t1, t2; 
    t1 = new JTextField(); 
    t1.setPreferredSize( new Dimension(60,20));
    t2 = new JTextField(); 
    t2.setPreferredSize( new Dimension(60,20));
    JButton b = new JButton(); // the button (sandwich) 
    b.addActionListener( this ); 
    b.setText("Activate");
    JPanel p = new JPanel(); // the tray
    p.add( b ); // button on tray 
    p.add(t1);
    p.add(t2); 
    this.add( p ); // tray goes out
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    System.out.println("I have been called..." + e); 
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 
  }
}

9. Let's read from the textfields when the button is pressed:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import java.awt.Dimension; 

public class LabEleven extends JFrame implements ActionListener {
  JTextField t1, t2; // so the constructor and the actionPerformed can share it
  public LabEleven() {
    t1 = new JTextField(); 
    t1.setPreferredSize( new Dimension(60,20));
    t2 = new JTextField(); 
    t2.setPreferredSize( new Dimension(60,20));
    JButton b = new JButton(); // the button (sandwich) 
    b.addActionListener( this ); 
    b.setText("Activate");
    JPanel p = new JPanel(); // the tray
    p.add( b ); // button on tray 
    p.add(t1);
    p.add(t2); 
    this.add( p ); // tray goes out
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    // System.out.println("I have been called..." + e); 
    String cartons = this.t1.getText();
    String items = this.t2.getText();    
    System.out.println("I read: " + cartons + " and " + items); 
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 
  }
}

10. I want to multiply and report the result on the frame now:

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import java.awt.Dimension; 
import javax.swing.JLabel;

public class LabEleven extends JFrame implements ActionListener {
  JTextField t1, t2; // so the constructor and the actionPerformed can share it
  JLabel result;
  public LabEleven() {
    this.result = new JLabel();
    this.result.setText("Welcome"); 
    t1 = new JTextField(); 
    t1.setPreferredSize( new Dimension(60,20));
    t2 = new JTextField(); 
    t2.setPreferredSize( new Dimension(60,20));
    JButton b = new JButton(); // the button (sandwich) 
    b.addActionListener( this ); 
    b.setText("Activate");
    JPanel p = new JPanel(); // the tray
    p.add(result); 
    p.add( b ); // button on tray 
    p.add(t1);
    p.add(t2); 
    this.add( p ); // tray goes out
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    // System.out.println("I have been called..." + e); 
    String cartons = this.t1.getText();
    String items = this.t2.getText();    
    System.out.println("I read: " + cartons + " and " + items); 
    this.result.setText( Integer.parseInt(cartons) * Integer.parseInt(items) + " items total" ); 
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 

11. Now we just finish it.

import javax.swing.JFrame; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import java.awt.Dimension; 
import javax.swing.JLabel;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent; 

public class LabEleven extends JFrame implements ActionListener, KeyListener {
  JTextField t1, t2; // so the constructor and the actionPerformed can share it
  JLabel result;
  public LabEleven() {
    this.result = new JLabel();
    this.result.setText("Welcome"); 
    t1 = new JTextField(); 
    t1.addKeyListener( this );
    t1.setPreferredSize( new Dimension(60,20));
    t2 = new JTextField(); 
    t2.addKeyListener( this );
    t2.setPreferredSize( new Dimension(60,20));
    JButton b = new JButton(); // the button (sandwich) 
    b.addActionListener( this ); 
    b.setText("Activate");
    JPanel p = new JPanel(); // the tray
    p.add(result); 
    p.add( b ); // button on tray 
    p.add(t1);
    p.add(t2); 
    this.add( p ); // tray goes out
    this.setSize(450, 175);
    this.setVisible(true);
  }  
  public void actionPerformed(ActionEvent e) {
    // System.out.println("I have been called..." + e); 
    String cartons = this.t1.getText();
    String items = this.t2.getText();    
    System.out.println("I read: " + cartons + " and " + items); 
    this.result.setText( Integer.parseInt(cartons) * Integer.parseInt(items) + " items total" ); 
  }
  public static void main(String[] args) {
    JFrame a = new LabEleven(); 
  }
  public void keyPressed(KeyEvent e) { }
  public void keyReleased(KeyEvent e) { }
  public void keyTyped(KeyEvent e) { 
    this.result.setText("Entering data..."); 
  }
}


12. What could be missing? (As it is it is an 1/3 + 1/3 + 2/3 * 1/3 = .88).

Also acknowledgments: 

http://silo.cs.indiana.edu:8346/04142012/001.html

https://www.cs.indiana.edu/classes/c212-dgerman/spr2015/lecture21.html

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Example extends JFrame implements ActionListener 
{  private JLabel nameJLabel, ageJLabel; 
   private JTextField nameJTextField, ageJTextField, totalResultJTextField;
   private JButton calculateJButton;
   public Example() 
   {  Container contentPane = getContentPane(); 
      contentPane.setLayout( null );            
      nameJLabel = new JLabel();             
      nameJLabel.setText( "Please enter your name: " );
      nameJLabel.setBounds( 16, 16, 160, 21 );
      contentPane.add( nameJLabel );
      nameJTextField = new JTextField(); 
      nameJTextField.setBounds( 170, 16, 70, 21 );
      nameJTextField.setHorizontalAlignment( JTextField.RIGHT );
      nameJTextField.setText("Laura"); 
      contentPane.add( nameJTextField );
      ageJLabel = new JLabel(); 
      ageJLabel.setText( "How old are you (in years)?" );
      ageJLabel.setBounds( 16, 48, 164, 21 );
      contentPane.add( ageJLabel );
      ageJTextField = new JTextField(); 
      ageJTextField.setText( "8" );
      ageJTextField.setBounds( 200, 48, 40, 21 );
      ageJTextField.setHorizontalAlignment( JTextField.RIGHT );
      contentPane.add( ageJTextField );
      totalResultJTextField = new JTextField(); 
      totalResultJTextField.setBounds( 244, 16, 186, 21 );
      totalResultJTextField.setHorizontalAlignment( JTextField.RIGHT );
      totalResultJTextField.setEditable( false ); 
      contentPane.add( totalResultJTextField );
      calculateJButton = new JButton(); 
      calculateJButton.setText( "Calculate Total" );
      calculateJButton.setBounds( 304, 48, 126, 24 );
      contentPane.add( calculateJButton ); 
      calculateJButton.addActionListener( this ); 
      setTitle( "Inventory" );
      setSize( 454, 132 );    
      setVisible( true );     
   } 
   public void actionPerformed(ActionEvent e) 
   {  String name = this.nameJTextField.getText(), age = this.ageJTextField.getText(); 
      this.totalResultJTextField.setText( name + " you will be " + (Integer.parseInt(age) + 1) + " next year."); 

   }
   public static void main( String[] args ) 
   {  Example application = new Example();
      application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }


This is just so you can create the actual interface we wanted. 

--

Comparison:

(a) this program reads from textfields, calculates and reports back into the GUI

Our program does something similar. 

(b) this program has everything in the right place. 

Our program does not quite. So we can learn that from this program.

(c) our program reacts to key events. The program above doesn't. 

--

Things to review for the exam:

http://www.cs.indiana.edu/classes/c212-dgerman/fall2015/lectureFourteen.html