1- package com .zynotic .studios .noor . calculator ;
1+ package com .zynotic .studios .guiCalculator ;
22
33import javafx .util .Duration ;
44
88import javafx .animation .PauseTransition ;
99import javafx .application .Application ;
1010import javafx .application .Platform ;
11- import javafx .event .ActionEvent ;
12- import javafx .event .EventHandler ;
1311import javafx .geometry .Insets ;
1412import javafx .geometry .Pos ;
1513import javafx .scene .Scene ;
2321import javafx .stage .Stage ;
2422
2523public class App extends Application {
26-
24+
2725 Font sevenSegmentFont ;
2826
2927 private TextField displayField ;
3028 private double firstNumber = 0 ;
3129 private String operator = "" ;
3230 private boolean startNewNumber = true ;
31+ private boolean errorOccurred = false ;
3332
3433 public static void main (String [] args ) {
3534 launch (args );
@@ -38,9 +37,9 @@ public static void main(String[] args) {
3837 @ SuppressWarnings ("exports" )
3938 @ Override
4039 public void start (Stage primaryStage ) {
41- Application .setUserAgentStylesheet (new PrimerLight ().getUserAgentStylesheet ());
42-
43- sevenSegmentFont = Font .loadFont (getClass ().getResource ("/assets/fonts/seven_segment.ttf" ).toExternalForm (), 30 );
40+ Application .setUserAgentStylesheet (new PrimerLight ().getUserAgentStylesheet ());
41+
42+ sevenSegmentFont = Font .loadFont (Objects . requireNonNull ( getClass ().getResource ("/assets/fonts/seven_segment.ttf" ) ).toExternalForm (), 30 );
4443
4544 if (sevenSegmentFont == null ) {
4645 System .out .println ("Font could not be loaded." );
@@ -103,12 +102,12 @@ private GridPane createButtonGrid() {
103102
104103 Button button0 = createButton ("0" , "#426573" , "white" );
105104 Button buttonDecimal = createButton ("." , "#426573" , "white" );
106- Button buttonDelete = createButton ("Del" , "#426573" , "#fff " );
105+ Button buttonDelete = createButton ("Del" , "#426573" , "white " );
107106 Button buttonAdd = createButton ("+" , "#b3c2c2" , "black" );
108107
109108 Button buttonOff = createButton ("OFF" , "#ce0d08" , "white" );
110109 Button buttonClear = createButton ("C" , "#ed6971" , "white" );
111- Button buttonEquals = createButton ("=" , "#7eb3e5" , "#fff " );
110+ Button buttonEquals = createButton ("=" , "#7eb3e5" , "white " );
112111 Button buttonSqrt = createButton ("√" , "#b3c2c2" , "black" );
113112
114113 grid .add (button7 , 0 , 0 );
@@ -150,34 +149,19 @@ private Button createButton(String label, String bgColor, String color) {
150149 }
151150
152151 private void buttonClicked (String label , Button button ) {
152+ if (errorOccurred ) {
153+ clearDisplay ();
154+ }
155+
153156 switch (label ) {
154- case "+" :
155- case "-" :
156- case "×" :
157- case "÷" :
158- handleOperator (label );
159- break ;
160- case "=" :
161- handleEquals ();
162- break ;
163- case "." :
164- handleDecimalPoint ();
165- break ;
166- case "√" :
167- handleSquareRoot ();
168- break ;
169- case "Del" :
170- handleDelete ();
171- break ;
172- case "C" :
173- clearDisplay ();
174- break ;
175- case "OFF" :
176- displayOff (button );
177- break ;
178- default : // numbers
179- handleNumber (label );
180- break ;
157+ case "+" , "-" , "×" , "÷" -> handleOperator (label );
158+ case "=" -> handleEquals ();
159+ case "." -> handleDecimalPoint ();
160+ case "√" -> handleSquareRoot ();
161+ case "Del" -> handleDelete ();
162+ case "C" -> clearDisplay ();
163+ case "OFF" -> displayOff (button );
164+ default -> handleNumber (label );
181165 }
182166 }
183167
@@ -187,11 +171,14 @@ private void handleOperator(String label) {
187171 }
188172 firstNumber = Double .parseDouble (displayField .getText ());
189173 operator = label ;
190- displayField .setText (firstNumber + " " + (operator == "÷" ? "/" : operator ));
174+ displayField .setText (firstNumber + " " + (Objects . equals ( operator , "÷" ) ? "/" : operator ));
191175 startNewNumber = true ;
192176 }
193177
194178 private void handleEquals () {
179+ if (operator .isEmpty ()) {
180+ return ; // No operation to perform
181+ }
195182 double secondNumber = Double .parseDouble (displayField .getText ().replace (firstNumber + " " + operator + " " , "" ));
196183 double result = 0 ;
197184 switch (operator ) {
@@ -209,6 +196,7 @@ private void handleEquals() {
209196 result = firstNumber / secondNumber ;
210197 } else {
211198 displayField .setText ("Error" );
199+ errorOccurred = true ;
212200 return ;
213201 }
214202 break ;
@@ -219,13 +207,26 @@ private void handleEquals() {
219207 }
220208
221209 private void handleSquareRoot () {
222- double number = Double .parseDouble (displayField .getText ());
223- if (number >= 0 ) {
224- double result = Math .sqrt (number );
225- displayField .setText (String .valueOf (result ));
226- startNewNumber = true ;
227- } else {
210+ String text = displayField .getText ();
211+ if (text .isEmpty ()) {
212+ displayField .setText ("Error" );
213+ errorOccurred = true ;
214+ return ;
215+ }
216+
217+ try {
218+ double number = Double .parseDouble (text );
219+ if (number >= 0 ) {
220+ double result = Math .sqrt (number );
221+ displayField .setText (String .valueOf (result ));
222+ startNewNumber = true ;
223+ } else {
224+ displayField .setText ("Error" );
225+ errorOccurred = true ;
226+ }
227+ } catch (NumberFormatException e ) {
228228 displayField .setText ("Error" );
229+ errorOccurred = true ;
229230 }
230231 }
231232
@@ -246,7 +247,7 @@ private void handleNumber(String label) {
246247
247248 private void handleDelete () {
248249 String text = displayField .getText ();
249- if (text .length () > 0 ) {
250+ if (! text .isEmpty () ) {
250251 displayField .setText (text .substring (0 , text .length () - 1 ));
251252 }
252253 }
@@ -255,21 +256,18 @@ private void clearDisplay() {
255256 displayField .setText ("" );
256257 operator = "" ;
257258 startNewNumber = true ;
259+ errorOccurred = false ;
258260 }
259261
260262 private void displayOff (Button button ) {
261263 displayField .setText ("Are you Sure?" );
262264 button .setOnAction (
263- new EventHandler <ActionEvent > () {
265+ actionEvent -> {
266+ displayField .setText ("Ok Fine! BYE" );
264267
265- @ Override
266- public void handle (ActionEvent actionEvent ) {
267- displayField .setText ("Ok Fine! BYE" );
268-
269- PauseTransition delay = new PauseTransition (Duration .seconds (1 ));
268+ PauseTransition delay = new PauseTransition (Duration .seconds (1 ));
270269 delay .setOnFinished (event -> Platform .exit ());
271270 delay .play ();
272- }
273- });
271+ });
274272 }
275273}
0 commit comments