JavaFX Simple Calculator - Design and Code
package sample_calculator;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author wajid
*/
public class Sample_Calculator extends Application {
private final StringBuilder input = new StringBuilder();
private String currentOpt = "";
private double result = 0;
private Label display;
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage){
primaryStage.setTitle("Material Java Calculator Demo");
GridPane grid = new GridPane();
grid.setPadding(new Insets(10, 10, 10, 10));
grid.setHgap(10);
grid.setVgap(10);
display = new Label("0");
display.setPrefSize(160, 30);
Button[] digitButtons = new Button[10];
for (int i =0;i<=10; i++ ){
digitButtons[i] = new Button(Integer.toString(i));
digitButtons[i].setPrefSize(60, 30);
final int digit = i;
digitButtons[i].setOnAction(event -> onDigitClick(digit));
}
Button addButton = createOperatorButton("+");
Button subtractButton = createOperatorButton("-");
Button mul = createOperatorButton("*");
Button div = createOperatorButton("/");
Button eq = createOperatorButton("=");
eq.setOnAction(event -> onEqualClick());
grid.add(display, 0, 0, 4, 1);
grid.addRow(1, digitButtons[7], digitButtons[8],digitButtons[9], addButton);
grid.addRow(2, digitButtons[4], digitButtons[5], digitButtons[6], subtractButton);
grid.addRow(3, digitButtons[1], digitButtons[2], digitButtons[3], mul);
grid.addRow(4, digitButtons[0], eq, div);
Scene scene = new Scene(grid, 240, 280);
primaryStage.setScene(scene);
primaryStage.show();
}
private Button createOperatorButton(String operator){
Button button = new Button(operator);
button.setPrefSize(60, 30);
button.setOnAction(event -> onOperatorClick(operator));
return button;
}
private void onDigitClick(int digit) {
input.append(digit);
updateDisplay();
}
private void onOperatorClick(String operator) {
if(input.length()>0){
if(!currentOpt.isEmpty()){
onEqualClick();
}
currentOpt = operator;
result = Double.parseDouble(input.toString());
input.setLength(0);
}
}
private void onEqualClick() {
if(input.length()>0){
double operand = Double.parseDouble(input.toString());
switch(currentOpt){
case "+":
result+=operand;
break;
case "-":
result-=operand;
break;
case "*":
result*=operand;
break;
case "/":
if(operand!=0){
result/=operand;
}else{
input.setLength(0);
input.append("Error");
updateDisplay();
return;
}
break;
}
input.setLength(0);
input.append(result);
currentOpt = "";
updateDisplay();
}
}
private void updateDisplay() {
String displayText = input.length()>0? input.toString() : Double.toString(result);
displayText = displayText.length()>10? displayText.substring(0, 10) : displayText;
display.setText(displayText);
}
}
This comment has been removed by the author.
ReplyDelete