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);
    }
}

Comments

Post a Comment

Popular posts from this blog

JavaFX UI /UX Dashboard

JavaFX code for responsive layout