1
- package com .zynotic .studios .noor . calculator ;
1
+ package com .zynotic .studios .guiCalculator ;
2
2
3
3
import javafx .util .Duration ;
4
4
8
8
import javafx .animation .PauseTransition ;
9
9
import javafx .application .Application ;
10
10
import javafx .application .Platform ;
11
- import javafx .event .ActionEvent ;
12
- import javafx .event .EventHandler ;
13
11
import javafx .geometry .Insets ;
14
12
import javafx .geometry .Pos ;
15
13
import javafx .scene .Scene ;
23
21
import javafx .stage .Stage ;
24
22
25
23
public class App extends Application {
26
-
24
+
27
25
Font sevenSegmentFont ;
28
26
29
27
private TextField displayField ;
30
28
private double firstNumber = 0 ;
31
29
private String operator = "" ;
32
30
private boolean startNewNumber = true ;
31
+ private boolean errorOccurred = false ;
33
32
34
33
public static void main (String [] args ) {
35
34
launch (args );
@@ -38,9 +37,9 @@ public static void main(String[] args) {
38
37
@ SuppressWarnings ("exports" )
39
38
@ Override
40
39
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 );
44
43
45
44
if (sevenSegmentFont == null ) {
46
45
System .out .println ("Font could not be loaded." );
@@ -103,12 +102,12 @@ private GridPane createButtonGrid() {
103
102
104
103
Button button0 = createButton ("0" , "#426573" , "white" );
105
104
Button buttonDecimal = createButton ("." , "#426573" , "white" );
106
- Button buttonDelete = createButton ("Del" , "#426573" , "#fff " );
105
+ Button buttonDelete = createButton ("Del" , "#426573" , "white " );
107
106
Button buttonAdd = createButton ("+" , "#b3c2c2" , "black" );
108
107
109
108
Button buttonOff = createButton ("OFF" , "#ce0d08" , "white" );
110
109
Button buttonClear = createButton ("C" , "#ed6971" , "white" );
111
- Button buttonEquals = createButton ("=" , "#7eb3e5" , "#fff " );
110
+ Button buttonEquals = createButton ("=" , "#7eb3e5" , "white " );
112
111
Button buttonSqrt = createButton ("√" , "#b3c2c2" , "black" );
113
112
114
113
grid .add (button7 , 0 , 0 );
@@ -150,34 +149,19 @@ private Button createButton(String label, String bgColor, String color) {
150
149
}
151
150
152
151
private void buttonClicked (String label , Button button ) {
152
+ if (errorOccurred ) {
153
+ clearDisplay ();
154
+ }
155
+
153
156
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 );
181
165
}
182
166
}
183
167
@@ -187,11 +171,14 @@ private void handleOperator(String label) {
187
171
}
188
172
firstNumber = Double .parseDouble (displayField .getText ());
189
173
operator = label ;
190
- displayField .setText (firstNumber + " " + (operator == "÷" ? "/" : operator ));
174
+ displayField .setText (firstNumber + " " + (Objects . equals ( operator , "÷" ) ? "/" : operator ));
191
175
startNewNumber = true ;
192
176
}
193
177
194
178
private void handleEquals () {
179
+ if (operator .isEmpty ()) {
180
+ return ; // No operation to perform
181
+ }
195
182
double secondNumber = Double .parseDouble (displayField .getText ().replace (firstNumber + " " + operator + " " , "" ));
196
183
double result = 0 ;
197
184
switch (operator ) {
@@ -209,6 +196,7 @@ private void handleEquals() {
209
196
result = firstNumber / secondNumber ;
210
197
} else {
211
198
displayField .setText ("Error" );
199
+ errorOccurred = true ;
212
200
return ;
213
201
}
214
202
break ;
@@ -219,13 +207,26 @@ private void handleEquals() {
219
207
}
220
208
221
209
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 ) {
228
228
displayField .setText ("Error" );
229
+ errorOccurred = true ;
229
230
}
230
231
}
231
232
@@ -246,7 +247,7 @@ private void handleNumber(String label) {
246
247
247
248
private void handleDelete () {
248
249
String text = displayField .getText ();
249
- if (text .length () > 0 ) {
250
+ if (! text .isEmpty () ) {
250
251
displayField .setText (text .substring (0 , text .length () - 1 ));
251
252
}
252
253
}
@@ -255,21 +256,18 @@ private void clearDisplay() {
255
256
displayField .setText ("" );
256
257
operator = "" ;
257
258
startNewNumber = true ;
259
+ errorOccurred = false ;
258
260
}
259
261
260
262
private void displayOff (Button button ) {
261
263
displayField .setText ("Are you Sure?" );
262
264
button .setOnAction (
263
- new EventHandler <ActionEvent > () {
265
+ actionEvent -> {
266
+ displayField .setText ("Ok Fine! BYE" );
264
267
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 ));
270
269
delay .setOnFinished (event -> Platform .exit ());
271
270
delay .play ();
272
- }
273
- });
271
+ });
274
272
}
275
273
}
0 commit comments