TimeTestWindow.java
Created with JBuilder
// Fig. 10.22: TimeTestWindow.java
// Inner class declarations used to create event handlers.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TimeTestWindow extends JFrame {
  private Time time;
  private JLabel hourLabel, minuteLabel, secondLabel;
  private JTextField hourField, minuteField, secondField, displayField;
  private JButton exitButton;

  // set up GUI
  public TimeTestWindow()
  {
    // call JFrame constructor to set title bar string
    super( "Inner Class Demonstration" );

    time = new Time();  // create Time object

    // use inherited method getContentPane to get window's content pane
    Container container = getContentPane();
    container.setLayout( new FlowLayout() );  // change layout

    // set up hourLabel and hourField
    hourLabel = new JLabel( "Set Hour" );
    hourField = new JTextField( 10 );
    container.add( hourLabel );
    container.add( hourField );

    // set up minuteLabel and minuteField
    minuteLabel = new JLabel( "Set Minute" );
    minuteField = new JTextField( 10 );
    container.add( minuteLabel );
    container.add( minuteField );

    // set up secondLabel and secondField
    secondLabel = new JLabel( "Set Second" );
    secondField = new JTextField( 10 );
    container.add( secondLabel );
    container.add( secondField );

    // set up displayField
    displayField = new JTextField( 30 );
    displayField.setEditable( false );
    container.add( displayField );

    // set up exitButton
    exitButton = new JButton( "Exit" );
    container.add( exitButton );

    // create an instance of inner class ActionEventHandler
    ActionEventHandler handler = new ActionEventHandler();

    // register event handlers; the object referenced by handler
    // is the ActionListener, which contains method actionPerformed
    // that will be called to handle action events generated by
    // hourField, minuteField, secondField and exitButton
    hourField.addActionListener( handler );
    minuteField.addActionListener( handler );
    secondField.addActionListener( handler );
    exitButton.addActionListener( handler );

  } // end constructor

  // display time in displayField
  public void displayTime()
  {
    displayField.setText( "The time is: " + time );
  }

  // launch application: create, size and display TimeTestWindow;
  // when main terminates, program continues execution because a
  // window is displayed by the statements in main
  public static void main( String args[] )
  {
    TimeTestWindow window = new TimeTestWindow();

    window.setSize( 400, 140 );
    window.setVisible( true );

  } // end main

  // inner class declaration for handling JTextField and JButton events
  private class ActionEventHandler implements ActionListener {

    // method to handle action events
    public void actionPerformed( ActionEvent event )
    {
      // user pressed exitButton
      if ( event.getSource() == exitButton )
        System.exit( 0 );   // terminate the application

      // user pressed Enter key in hourField
      else if ( event.getSource() == hourField ) {
        time.setHour( Integer.parseInt(
                                        event.getActionCommand() ) );
        hourField.setText( "" );
      }

      // user pressed Enter key in minuteField
      else if ( event.getSource() == minuteField ) {
        time.setMinute( Integer.parseInt(
            event.getActionCommand() ) );
        minuteField.setText( "" );
      }

      // user pressed Enter key in secondField
      else if ( event.getSource() == secondField ) {
        time.setSecond( Integer.parseInt(
            event.getActionCommand() ) );
        secondField.setText( "" );
      }

      displayTime();  // call outer class's method

    } // end method actionPerformed

  } // end inner class ActionEventHandler

} // end class TimeTestWindow



TimeTestWindow.java
Created with JBuilder