Temperature Convertor

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.HPos;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

import java.text.DecimalFormat;

/**
 * Main application class
 */
public class TempConvertor extends Application {
    @Override
    public void start(Stage primaryStage) {
        Scene scene = new Scene(new TemperaturePane(), 480, 280);
        primaryStage.setTitle("Professional Temperature Convertor");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    static void main(String[] args) {
        launch(args);
    }
}

/**
 * Custom pane class for temperature conversion
 */
class TemperaturePane extends GridPane {
    private final Label result, inputLabel, outputLabel, formulaLabel;
    private final TextField inputField;

    private boolean isFtoC = true;
    private final DecimalFormat formatter = new DecimalFormat("#,##0.00");

    public TemperaturePane() {
        Font font = new Font(18);
        Font smallFont = new Font(14);

        inputLabel = new Label("Fahrenheit:");
        inputLabel.setFont(font);
        GridPane.setHalignment(inputLabel, HPos.RIGHT);

        outputLabel = new Label("Celsius:");
        outputLabel.setFont(font);
        GridPane.setHalignment(outputLabel, HPos.RIGHT);

        result = new Label("---");
        result.setFont(font);
        GridPane.setHalignment(result, HPos.CENTER);

        formulaLabel = new Label("Formula: [°C] = ([°F] − 32) × 5/9  |  [°F] = [°C] × 9/5 + 32");
        formulaLabel.setFont(smallFont);
        GridPane.setHalignment(formulaLabel, HPos.CENTER);
        GridPane.setColumnSpan(formulaLabel, 2);

        inputField = new TextField();
        inputField.setFont(font);
        inputField.setPrefWidth(180);
        inputField.setAlignment(Pos.CENTER);
        inputField.setOnAction(this::processReturn);

        // Vertical toggle button
        Button toggleBtn = new Button("⇅");
        toggleBtn.setFont(new Font(22));
        toggleBtn.setOnAction(this::handleToggle);

        setAlignment(Pos.CENTER);
        setHgap(15);
        setVgap(12);
        updateUI("#F5F5F5", "black", "---");

        add(inputLabel, 0, 0);
        add(inputField, 1, 0);
        add(toggleBtn, 1, 1);
        GridPane.setHalignment(toggleBtn, HPos.CENTER);
        add(outputLabel, 0, 2);
        add(result, 1, 2);
        add(formulaLabel, 0, 3);
    } // End of Constructor

    private void handleToggle(ActionEvent event) {
        isFtoC = !isFtoC;
        inputField.clear();
        result.setText("---");

        if (isFtoC) {
            inputLabel.setText("Fahrenheit:");
            outputLabel.setText("Celsius:");
        } else {
            inputLabel.setText("Celsius:");
            outputLabel.setText("Fahrenheit:");
        }
    }

    public void processReturn(ActionEvent event) {
        try {
            String rawInput = inputField.getText().replace(",", "");
            double inputValue = Double.parseDouble(rawInput);
            double outputValue;

            if (isFtoC) {
                double ABSOLUTE_ZERO_F = -459.67;
                if (inputValue < ABSOLUTE_ZERO_F) {
                    updateUI("#000000", "white", "Below Min");
                    return;
                }
                outputValue = (inputValue - 32) * 5.0 / 9.0;
            } else {
                double ABSOLUTE_ZERO_C = -273.15;
                if (inputValue < ABSOLUTE_ZERO_C) {
                    updateUI("#000000", "white", "Below Min");
                    return;
                }
                outputValue = (inputValue * 9.0 / 5.0) + 32;
            }

            inputField.setText(formatter.format(inputValue));
            String resultText = formatter.format(outputValue);

            double tempInCelsius = isFtoC ? outputValue : inputValue;
            applyColorLogic(tempInCelsius, resultText);

        } catch (NumberFormatException e) {
            updateUI("#FFCCCC", "black", "Invalid Input");
        }
    }

    private void applyColorLogic(double cTemp, String resultText) {
        if (cTemp <= 0) {
            updateUI("#ADD8E6", "black", resultText);
        } else if (cTemp <= 30) {
            updateUI("#FFD700", "black", resultText);
        } else if (cTemp <= 50) {
            updateUI("#FF8C00", "white", resultText);
        } else {
            updateUI("#FF4500", "white", resultText);
        }
    }

    private void updateUI(String bgColor, String textColor, String text) {
        setStyle("-fx-background-color: " + bgColor);
        String textStyle = "-fx-text-fill: " + textColor;
        inputLabel.setStyle(textStyle);
        outputLabel.setStyle(textStyle);
        result.setStyle(textStyle);
        formulaLabel.setStyle(textStyle);
        result.setText(text);
    }
}

 

Scroll to Top