/* This applet prints all positive prime numbers between the lower and upper

limits. 

<applet codebase="Java Classes" 

code="PrimeNumbers.class" width=600 height=400>

*/

import java.awt.*;

import java.awt.event.*;

import java.applet.Applet;



public class PrimeNumbers extends Applet implements ActionListener{

	Label prompt1;			// Labels to display prompt for the lower limit

	TextField inputLower;	// input field for user to input a lower bound

	Label prompt2;			// Labels to display prompt for the upper limit

	TextField inputUpper;	// input field for user to input an upper bound

	int lowerBound, upperBound;	// store the lower and upper bound

	boolean timeToDisplay=false;// Is it the time to display numbers?

		

	public void init() {		// set up the GUI

		prompt1 = new Label ("Enter a lower bound : ");

		inputLower = new TextField (10);

		prompt2 = new Label ("Enter an upper bound : ");

		inputUpper = new TextField (10);

		add ( prompt1 );		// set prompt for entering lower bound

		add ( inputLower );		// set up input field for the lower bound

		add ( prompt2 );		// set prompt for entering upper bound

		add ( inputUpper );		// set up input field for the upper bound

		inputUpper.addActionListener( this );

	}

	

	public void paint( Graphics g ) { // calculate and display result

		int xPos=10, yPos=80, columnNumber=1; // initial settings

		int xIncrement = 60; 	// increment for x (horizontal) coordinate

		int yIncrement = 20;	// increment for y (vertical) coordinate

		int possiblePrime, possibleDivisor;

								// possiblePrime has to be declared here

		if ( timeToDisplay ) {

		   g.drawString ("The prime numbers between  " + lowerBound 

			   				+ "  and  " + upperBound + "  are the following:", 20, 50);

		   for ( possiblePrime = lowerBound; possiblePrime <= upperBound; 

							possiblePrime++ ) { // For each possible prime number

    			for ( possibleDivisor = 2; possibleDivisor < possiblePrime;

                    		possibleDivisor++ ) { // For each of its possible divisor

        			if ( possiblePrime % possibleDivisor == 0 )

                         	// found a divisor so possiblePrime is not prime

         				break;	// break put of the inner loop

       			} // end of inner for-loop

       			if ( possibleDivisor == possiblePrime ) {

           		  		// exhausted possible divisors, so possiblePrime is a prime

           			g.drawString ( Integer.toString(possiblePrime), xPos, yPos );

        		  		// fix up the x and y coordinates for next display

           			if (columnNumber < 10) {// still on the same line

         				++columnNumber;		// increment the columne number

        				xPos += xIncrement;	// increment the x position

        			} // end of if (columeNumber < 10)

        			else {					// go to the next line

        				columnNumber = 1;	// reset the column number

        				xPos = 10;			// initialize the x coordinate to 10

        				yPos += yIncrement;	// reset the y coordinate to next line

        			} // end else

    			} // end of if ( possibleDivisor == possiblePrime )

    		} // end of outer for-loop

    	} // end of if (TimeToDisplay)

  	} // end of paint()

  	

   	public void actionPerformed ( ActionEvent e ) {

			lowerBound = Integer.parseInt (inputLower.getText());

			upperBound = Integer.parseInt (inputUpper.getText());

			inputLower.setText("");

			inputUpper.setText("");

			timeToDisplay = true; // set the flag to display

			repaint();

     } // end of actionPerformed()



} // end of PrimeNumbers class
