Purpose: Developing GUI based Calculator Application
The purpose of this simple yet comprehensive assignment is to give you the enjoyment of exercising your programming skills and the delight of applying your knowledge of how to build a relatively simple GUI for a Calculator Application. The Calculator you are to build will be a functional replica of your Windows calculator. The assignment is based on the material covered in lectures, lab exercises, and hybrid activities. You will also find Chapter 12 of Textbook 1 to be very helpful.
In this part of Assignment #1 you are to complete the implementation of the Calculator Application. Your Calculator Application must exhibit the behavior described below.
In this part of Assignment#1 you must add a CalculatorModel class to the calculator package, and complete the implementation of the event handling in the Controller class or classes.
Class CalculatorModel The class CalculatorModel class is responsible for performing the calculations. The CalculatorModel class code must provide at least the following: set methods for setting the operands (both operands must be of String type). set methods to set the arithmetic operation and the operational mode (Integer or Float) set method to set the floating-point precision. get method to return the result from the operation in formatted form based on the current precision. The result should be implemented as a “virtual filed”. set and get method for the error state field of the class. If the result of the calculations cannot be determined (illegal operands, operators or mode; result is NaN, Infinity, or out of range) the error state must be set to true. calculate() method that calculates the result based on the current operands, arithmentic operation and operational mode (Integer or Float)
Controller class(es) In this part of the assignment you must complete the implementation of the event handling. All components used in the Calculator GUI generate an action event. You can use only one instance of the Controller class (see Assignment 1 Part 1) to handle all action events in one place, or you can use more than one instance to handle different action events in different places. If for some reason you need to handle events different from ActionEvent, you must implement the event handler(s) as private inner classes in the same way as the Controller class. You must name them appropriately: The name of the class must contain the word Controller. For example: XYZController.
CST8221 – JAP, Assignment 1, Part 2, MMVII Page 2 of 5
The implementation of the event handler(s) must provide behavior identical to the behavior described in the Important test checkpoints section. No calculations must be performed in the Controller class(es). All calculations must be carried out by the CalculatorModel class. In the description of the checkpoints the notation [ ] means that a specific button must be clicked. For example, [Int] means that the Int checkbox must be clicked. The sequence 2+3= means that the following buttons have been clicked in the specified order: button 2, button +, button 2, button =. When 2 is clicked the calculator display2 must show 2; then when + is clicked display2 must still display 2 but display1 must show 2 +; then when 3 is clicked display2 must show 3; and finally when = is clicked display2 must show the result which in this case is 5.00 in Float (F) mode and 5 in Integer (I) mode and display1 must be cleared. It should operate in the same way your Windows calculator operates except for number of precision digits displayed after the decimal point.
2 clicked + clicked
3 clicked = clicked After = has been clicked if a number is clicked, display2 must display the number. Also, after = has been clicked the backspace button ↲ is not operational. The backspace button is operational only when numbers (operands) are entered.
7 clicked 7 clicked again
backspace ↲ has been clicked
CST8221 – JAP, Assignment 1, Part 2, MMVII Page 3 of 5
Important test checkpoints: 1) When the user clicks on the [Int] checkbox the . button must be disabled and its background of the button must be changed to new Color(178,156,250). The mode/error display label must display a black letter I on a green background. The calculator must operate in integer mode. Then if one of the floating-point precision radio buttons is clicked the . button must be enabled and blue again. The label must display a black letter F on a yellow background. The calculator must operate in Float mode.
2) 22 + 22 = must display 44 in Integer (I) mode and 44.00 in Float (F) mode. Do not forget that at launch the Calculator is in F mode and the precision is .00. If 2 is clicked after =, must display 2 (display2)
3) 2 * 2 = 4.00 (display2) [+] (display1: 4.00+, display2: 4.00)  (display2:5) [=] must display 9.00 (display2) in F mode or 9 in I mode.
4) 2*= must display 4 or 4.00 (display2) [=] displays 8 or 8.00 [=] displays 16 or 16.0
5) 2*= displays 4 or 4.00 [=] displays 8 or 8.00 [=] displays 16 or 16.00
6) 2*/ (display1: 2/) = must display 1or 1.00 (display2); 2/*= displays 4 or 4.00
7) 2/*= (display1: 2*) must display 4 or 4.00 (display2)
8) 12 [↲]+2 = must display 3 or 3.00
9) 2 [±] must display -2 (display2). If followed by [±], must display 2 (display2)
10) -123[↲][↲] must display -1
11) -123[↲][↲][↲] must display 0 (display2) in I mode ([Int] checked)
12) -123.0 [↲][↲] must display -123
13) -123.0 [↲][↲][↲][↲] [↲] must display 0.0 (display2)
14) 1 / 0 = must display the following:
Additionally, after an error, the calculator GUI must not respond to any button except C, Int, and the precisions radio buttons. The calculator display and the mode/error display must not change until C is pressed. Pressing C (clear) must display 0 or 0.0 depending on the current mode of operation, and change mode-error display correspondingly to I or F with the appropriate background color and alignment.
CST8221 – JAP, Assignment 1, Part 2, MMVII Page 4 of 5
C clicked in mode F C clicked in mode I 15) 0 / 0 = must display the following:
The calculator must behave in the same way as explained in 14)
16) -4 / 2 = must display -2 or -2.00
17) 2.5 [Int] or 2.5 [+ – / *] [Int] must clear the calculator display
18) [Int]2[radio button] or [Int] 2 [+ – / *] [radio button] must clear the calculator display
19) [.0] 1 / 3= must display 0.3 in F mode; [Int]1 / 3 must display 0
20) [.00] 1 / 3 = must display 0.33 21) [Sci] 1 / 3 = must display 3.333333E-01
22) [Sci] 1 / 3 = + 2 = must display 2.333333E+00 in F mode; [Int] 1 / 3 = + 2 = must display 2
23) At any time during operation [C] must clear the calculator display (see 17 and 18)
You should try other calculations and combinations and make sure that they work properly. The calculator must not accept improperly formatted real numbers like 0..0, . , ..5, or … The calculator must not display numbers that are longer than the current width of the display. The calculator must not display incorrect results. The calculator must not print on the console, and must not crash or generate exceptions on input or calculations.
CST8221 – JAP, Assignment 1, Part 2, MMVII Page 5 of 5
Bonus 1 (1.0%) Incorporate a progress bar in the Calculator splash screen. The progress bar should initially read “Loading Calculator. Please wait…”, and then show growing color bar. See HybridAct#6 for details of how to work with progress bars. Create an internal delay in your splash screen class.
Bonus 2 (1.0%) According to the assignment specifications in order to change the operational mode of the calculator from Float (which is the default mode) to integer the user must click on the [Int] checkbox once. Then if the user wants to return back to the floating-point mode, the user must click on one of the precision radio buttons. The design specification does not indicate what should happen if the user clicks on the checkbox twice or multiple times. The purpose of this bonus task is to rectify this situation.
Modify your event handling code so that the calculator works as specified before but additionally if the user clicks on the checkbox (the calculator goes into integer mode) and immediately clicks the checkbox again, the checkbox becomes unchecked, the mode returns back to floating-point, and the precision radio .00 button becomes selected. If the checkbox is clicked for the third time the calculator returns to integer mode. Note: Currently only four components are available to the Controller inner class – JTextField display1 and display2, JLabel error and JButton dotButton. You may need to add some more.
Bonus 3 (2.0%) Make the calculator accept keyboard input alongside with the mouse input. The text field must stay disabled i.e. it must not accept keyboard directly. The get full credit for this bonus you must use Input and Action maps.
NOTE: In order to receive credit for the bonus tasks your calculator must operate according to the specifications and your bonus tasks must be reflected in the test plan.
What to Submit: Paper submission: No paper submission is required for this assignment Code submission: Compress in one .zip file all .java files, .class files, and image file(s). Use the Assignment 1 Part 2 upload link in the Assignment folder and upload the submission zip file on Blackboard prior to or on the due date. The name of the zip file must have the following structure: Student’s family name followed by the last three digits of the student ID number followed by _JAP_A1P2 , and finally, followed by your lab section number (s301, s302, s303). For example, Ranev007_JAP_A1P2_s301.zip. The submission must follow the course submission standards. The Assignment Submission Standard and the Assignment Marking Guide are posted on Blackboard in the Course Information folder.