LoginSignup
0
1

More than 1 year has passed since last update.

JavaFXでBMI計算アプリを作ってみる。

Last updated at Posted at 2022-11-27

経緯

以前JavaScriptでも作成したBMI計算アプリをJavaFXでも作成することにした。

環境構築

①eclipseマーケットプレイスからプラグイン(e(fx)clipse)のインストール
②OpenJFXのインストール
⇒Javaのビルドパスにてライブラリの追加が必要。
⇒libフォルダ内のsrc.zip以外すべてのjar
③Scene Builderのインストール

ディレクトリ構成

image.png

ソースコード

Main.java

package application;
	
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;


public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("Sample.fxml"));
			Scene scene = new Scene(root,600,400);
			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}

Sample.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.text.*?>
<?import javafx.scene.web.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="application.SampleController">
   <children>
   	<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   		<children>
   			<Label alignment="CENTER" layoutX="7.0" layoutY="6.0" prefHeight="69.0" prefWidth="590.0" text="BMI計算">
   				<font>
   					<Font size="67.0" />
   				</font>
   			</Label>
   			<Label alignment="CENTER" layoutX="96.0" layoutY="129.0" prefHeight="37.0" prefWidth="120.0" text="身長" />
   			<Label alignment="CENTER" layoutX="96.0" layoutY="182.0" prefHeight="37.0" prefWidth="120.0" text="体重" />
   			<TextField fx:id="cm" layoutX="231.0" layoutY="132.0" />
   			<TextField fx:id="kg" layoutX="231.0" layoutY="185.0" />
   			<Button layoutX="463.0" layoutY="232.0" mnemonicParsing="false" onMouseClicked="#onClick" text="計算する" />
   			<Label fx:id="result" alignment="CENTER" layoutX="100.0" layoutY="300.0" prefHeight="67.0" prefWidth="415.0" text="">
   				<font>
   					<Font size="46.0" />
   				</font>
   			</Label>
   		</children>
   	</AnchorPane>
   </children>
</BorderPane>

SampleController.java

package application;

import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;

public class SampleController {

	@FXML
	private TextField cm;

	@FXML
	private TextField kg;

	@FXML
	private Label result;

	@FXML
	void onClick(MouseEvent  event) {
		String w = kg.getText();
		String h = cm.getText();
		

		double weight = Double.parseDouble(w);
		double height = Double.parseDouble(h);
		
		height /= 100;

		double bmi = bmiCalc(weight, height);

		if (bmi < 18.5) {
			result.setTextFill(Color.BLUE);
			result.setText("貴方は、やせ型です!");

		} else if (18.5 <= bmi && bmi < 25) {
			result.setTextFill(Color.GREEN);
			result.setText("貴方は、標準です!");

		} else if (bmi >= 25) {
			result.setTextFill(Color.RED);
			result.setText("貴方は、肥満です!");
		}
	}

	public double bmiCalc(double weight,double height) {
		double bmi = weight / (height * height);
		return bmi;

	}

}

SceneBuilderの画面
image.png

動作結果

image.png

image.png

参考サイト

https://nompor.com/2019/01/26/post-4978/
https://java.keicode.com/lib/javafx-scene-builder.php
http://pineplanter.moo.jp/non-it-salaryman/2017/04/29/javafx-scene-builder/
http://nobotta.dazoo.ne.jp/blog/?p=1335
https://www.relife-campus.com/%E3%80%90javafx%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%80%91bmi%E8%A8%88%E7%AE%97%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90/
https://stackoverflow.com/questions/27079062/javafx-event-argument-type-mismatch
https://totomo.net/11300-javafxcontrol.htm
https://qiita.com/opengl-8080/items/51bef25aa05ecd929a3d

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1