Untitled
Anonymous
plain_text
02/28/2026 10:48 AM
9.0 KB
12
Indexable
package com.example.bmippmcpmgui;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.util.Locale;
public class KalkulatorZdrowiaApp extends Application {
enum Aktywnosc {
SIEDZACY("siedzący", 1.2),
UMIARKOWANY("umiarkowany", 1.375),
AKTYWNY("aktywny", 1.55),
BARDZO_AKTYWNY("bardzo wysoka aktywność", 1.725),
EKSTREMALNY("ekstremalnie aktywny", 1.9);
final String nazwa;
final double wsp;
Aktywnosc(String nazwa, double wsp) {
this.nazwa = nazwa;
this.wsp = wsp;
}
@Override
public String toString() {
return nazwa;
}
}
enum Plec {
K, M
}
@Override
public void start(Stage stage) {
TextField tfWaga = new TextField();
TextField tfWzrost = new TextField();
TextField tfWiek = new TextField();
tfWaga.setPromptText("kg");
tfWzrost.setPromptText("cm");
tfWiek.setPromptText("lata");
tylkoLiczby(tfWaga);
tylkoLiczby(tfWzrost);
tylkoLiczby(tfWiek);
ToggleGroup plecGroup = new ToggleGroup();
RadioButton rbK = new RadioButton("K");
RadioButton rbM = new RadioButton("M");
rbK.setToggleGroup(plecGroup);
rbM.setToggleGroup(plecGroup);
rbK.setSelected(true);
ComboBox<Aktywnosc> cbAktywnosc = new ComboBox<>();
cbAktywnosc.getItems().addAll(Aktywnosc.values());
cbAktywnosc.setValue(Aktywnosc.SIEDZACY);
Button btnBMI = new Button("BMI");
Button btnPPM = new Button("PPM");
Button btnCPM = new Button("CPM");
btnBMI.setPrefWidth(100);
btnPPM.setPrefWidth(100);
btnCPM.setPrefWidth(100);
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.add(new Label("Waga:"), 0, 0);
grid.add(tfWaga, 1, 0);
grid.add(new Label("Wzrost:"), 0, 1);
grid.add(tfWzrost, 1, 1);
grid.add(new Label("Wiek:"), 0, 2);
grid.add(tfWiek, 1, 2);
VBox prawa = new VBox(10,
new Label("Płeć:"),
new HBox(10, rbK, rbM),
new Label("Aktywność:"),
cbAktywnosc
);
HBox gora = new HBox(40, grid, prawa);
HBox buttons = new HBox(15, btnBMI, btnPPM, btnCPM);
buttons.setAlignment(Pos.CENTER);
Region spacer = new Region();
VBox.setVgrow(spacer, Priority.ALWAYS);
VBox root = new VBox(20,
gora,
spacer,
buttons
);
root.setPadding(new Insets(20));
btnBMI.setOnAction(e -> {
try {
double waga = parseDouble(tfWaga.getText());
double wzrost = parseDouble(tfWzrost.getText());
int wiek = parseInt(tfWiek.getText());
double bmi = waga / Math.pow(wzrost / 100.0, 2);
String kat = kategoriaBMI(bmi);
pokazInfo("BMI",
String.format(Locale.US,
"Twoje BMI wynosi: %.1f\n\nKategoria: %s",
bmi, kat));
} catch (Exception ex) {
pokazBlad();
}
});
btnPPM.setOnAction(e -> {
try {
double waga = parseDouble(tfWaga.getText());
double wzrost = parseDouble(tfWzrost.getText());
int wiek = parseInt(tfWiek.getText());
Plec plec = rbM.isSelected() ? Plec.M : Plec.K;
double ppm = (plec == Plec.M)
? 10 * waga + 6.25 * wzrost - 5 * wiek + 5
: 10 * waga + 6.25 * wzrost - 5 * wiek - 161;
pokazInfo("PPM",
"Twoje PPM wynosi:\n" + Math.round(ppm) + " kcal");
} catch (Exception ex) {
pokazBlad();
}
});
btnCPM.setOnAction(e -> {
try {
double waga = parseDouble(tfWaga.getText());
double wzrost = parseDouble(tfWzrost.getText());
int wiek = parseInt(tfWiek.getText());
Plec plec = rbM.isSelected() ? Plec.M : Plec.K;
double ppm = (plec == Plec.M)
? 10 * waga + 6.25 * wzrost - 5 * wiek + 5
: 10 * waga + 6.25 * wzrost - 5 * wiek - 161;
double cpm = ppm * cbAktywnosc.getValue().wsp;
pokazInfo("CPM",
"Twoje CPM wynosi:\n" + Math.round(cpm) + " kcal");
} catch (Exception ex) {
pokazBlad();
}
});
stage.setTitle("BMI+PPM+CPM+GUI");
stage.setScene(new Scene(root, 520, 300));
stage.show();
}
private void tylkoLiczby(TextField field) {
field.textProperty().addListener((obs, old, now) -> {
if (!now.matches("\\d*(\\.\\d*)?")) {
field.setText(old);
}
});
}
private double parseDouble(String text) {
if (text == null || text.isEmpty())
throw new IllegalArgumentException();
double v = Double.parseDouble(text);
if (v <= 0)
throw new IllegalArgumentException();
return v;
}
private int parseInt(String text) {
if (text == null || text.isEmpty())
throw new IllegalArgumentException();
int v = Integer.parseInt(text);
if (v <= 0)
throw new IllegalArgumentException();
return v;
}
private String kategoriaBMI(double bmi) {
if (bmi < 18.5) return "niedowaga";
if (bmi < 25) return "waga prawidłowa";
if (bmi < 30) return "nadwaga";
return "otyłość";
}
private void pokazBlad() {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Błąd danych");
alert.setHeaderText("Dane są nieprawidłowe");
alert.setContentText("Proszę wpisać ponownie poprawne wartości.");
alert.showAndWait();
}
private void pokazInfo(String tytul, String tresc) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle(tytul);
alert.setHeaderText(null);
alert.setContentText(tresc);
alert.showAndWait();
}
public static void main(String[] args) {
launch(args);
}
}
Editor is loading...
Leave a Comment