PC家庭教師_【LUA】の日記

プログラマのLUAがPC家庭教師をするブログ

JavaFXにて計算機を作ってみよう~1~

JavaFXにて計算機を作ってみたい・・・1

以下ソース

~~~

package hell_555;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

// 計算機(シンプル)
public class hell_555 extends Application {
	/*
	 *  フィールド変数
	 */
	// 主にインスタンスを初期化しておく(前準備)
	GridPane gridPane = null;
	String[] buttonNameNumeric = null;
	Button buttonPlus = null;
	Button buttonMinus = null;
	Button buttonTimes = null;
	Button buttonDivide = null;
	Button buttonNumeric_0 = null;
	Button buttonNumeric_1 = null;
	Button buttonNumeric_2 = null;
	Button buttonNumeric_3 = null;
	Button buttonNumeric_4 = null;
	Button buttonNumeric_5 = null;
	Button buttonNumeric_6 = null;
	Button buttonNumeric_7 = null;
	Button buttonNumeric_8 = null;
	Button buttonNumeric_9 = null;
	// 最上段のHBox
	HBox hbox1 = null;
	// 2段目のHBox
	HBox hbox2 = null;
	// 3段目のHBox
	HBox hbox3 = null;
	// 4段目のHBox
	HBox hbox4 = null;
	// 数値と四則演算をつなぐVBOX
	HBox hboxConnect = null;
	// 数値をまとめるVBOX(左部)
	VBox vboxNumeric = null;
	// 四則演算をまとめるVBOX(右部)
	VBox vboxManipulate = null;
	// 計算結果を表示するTextField(入力可)
	TextField ResultTextField = null;

	/*
	 *  コンストラクタ
	 */
	// インスタンスを生成しておく(切り分け)
	public hell_555() {
		gridPane = new GridPane();
		buttonPlus = new Button();
		buttonMinus = new Button();
		buttonTimes = new Button();
		buttonDivide = new Button();
		hbox1 = new HBox();
		hbox2 = new HBox();
		hbox3 = new HBox();
		hbox4 = new HBox();
		hboxConnect = new HBox();
		vboxNumeric = new VBox();
		vboxManipulate = new VBox();
		ResultTextField = new TextField();

		/**
		 *  ここから初期値の設定処理
		 */
		// GridPaneのスペーシングをする関数
		setPaneSpacing();
		// 0~9のボタンを設定する関数(まとめ)
		setButtonsNumeric();
		// 四則演算( +, -, *, / )のボタンを設定する関数(まとめ)
		setButtonsManipulate();
		// 各ボタンをまとめてつなぐ関数
		setConnectButtons();

	}

	/*
	 * javaFXのメイン関数に相当
	 */
	// javaFXのメイン関数に相当
	// 必要に応じてここでインスタンスを生成する
	public void start(Stage stage) {
		// Stageにタイトルを設定
		stage.setTitle("計算機(シンプル)");
		// GridPaneにボタンを設定
		gridPane.getChildren().add(hboxConnect);
		// SceneにGridPaneを設定
		Scene scene = new Scene(gridPane, 360, 360);
		// StageにSceneを設定
		stage.setScene(scene);
		// Stageを表示
		stage.show();
	}

	/*
	 *  0~9のボタンを設定する関数(まとめ)
	 */
	// 関連するprivate関数のまとめ
	private void setButtonsNumeric() {
		/*
		 * 上から順番にインスタンスを設定
		 */
		// (インスタンスを設定する順番を違えると狂う)
		// 0~9のボタンを設定する関数1
		setNumButtonInstance();
		// 0~9のボタンを設定する関数2
		setButtonNumeric();
		// 0~9のボタンを設定する関数3
		setNumButtonPosition();
	}

	/*
	 *  0~9のボタンを設定する関数1
	 *  ボタンインスタンスを設定
	 *  @param 関数にて生成したボタン名
	 */
	// private
	private void setNumButtonInstance() {
		buttonNumeric_0 = new Button();
		buttonNumeric_1 = new Button();
		buttonNumeric_2 = new Button();
		buttonNumeric_3 = new Button();
		buttonNumeric_4 = new Button();
		buttonNumeric_5 = new Button();
		buttonNumeric_6 = new Button();
		buttonNumeric_7 = new Button();
		buttonNumeric_8 = new Button();
		buttonNumeric_9 = new Button();
	}

	/*
	 *  0~9のボタンを設定する関数2
	 *  ボタンテキストを設定
	 */
	// private
	private void setButtonNumeric() {
		buttonNumeric_0.setText("0");
		buttonNumeric_1.setText("1");
		buttonNumeric_2.setText("2");
		buttonNumeric_3.setText("3");
		buttonNumeric_4.setText("4");
		buttonNumeric_5.setText("5");
		buttonNumeric_6.setText("6");
		buttonNumeric_7.setText("7");
		buttonNumeric_8.setText("8");
		buttonNumeric_9.setText("9");
	}

	/*
	 *  0~9のボタンを設定する関数3
	 *  ボタン配置を設定
	 */
	// private
	private void setNumButtonPosition() {
		buttonNumeric_0.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_1.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_2.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_3.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_4.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_5.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_6.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_7.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_8.setPadding(new Insets(15, 15, 15, 15));
		buttonNumeric_9.setPadding(new Insets(15, 15, 15, 15));
		ResultTextField.setPrefWidth(240);
		HBox.setMargin(buttonNumeric_0, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_1, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_2, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_3, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_4, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_5, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_6, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_7, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_8, new Insets(10, 10, 10, 10));
		HBox.setMargin(buttonNumeric_9, new Insets(10, 10, 10, 10));
		HBox.setMargin(ResultTextField, new Insets(20, 20, 20, 20));
		hbox1.getChildren().addAll(
				buttonNumeric_0, buttonNumeric_1, buttonNumeric_2);
		hbox2.getChildren().addAll(
				buttonNumeric_3, buttonNumeric_4, buttonNumeric_5);
		hbox3.getChildren().addAll(
				buttonNumeric_6, buttonNumeric_7, buttonNumeric_8);
		hbox4.getChildren().add(buttonNumeric_9);
		vboxNumeric.getChildren().addAll(hbox1, hbox2, hbox3, hbox4, ResultTextField);
	}

	/*
	 *  四則演算( +, -, *, / )のボタンを設定する関数(まとめ)
	 */
	// 関連するprivate関数のまとめ
	private void setButtonsManipulate() {
		/*
		 * 上から順番にインスタンスを設定
		 */
		// (インスタンスを設定する順番を違えると狂う)
		// 四則演算( +, -, *, / )のボタンを設定する関数1
		setButtonManipulate();
		// 四則演算( +, -, *, / )のボタンを設定する関数2
		setManipulaButtonPosition();
	}

	/*
	 *  四則演算( +, -, *, / )のボタンを設定する関数1
	 *  ボタンテキストを設定
	 */
	// private
	private void setButtonManipulate() {
		buttonPlus.setPadding(new Insets(20, 20, 20, 20));
		buttonMinus.setPadding(new Insets(20, 20, 20, 20));
		buttonTimes.setPadding(new Insets(20, 20, 20, 20));
		buttonDivide.setPadding(new Insets(20, 20, 20, 20));
		ResultTextField.setPadding(new Insets(20, 20, 20, 20));
		buttonPlus.setText("+");
		buttonMinus.setText("ー");
		buttonTimes.setText("✕");
		buttonDivide.setText("➗");
	}

	/*
	 *  四則演算( +, -, *, / )のボタンを設定する関数2
	 *  ボタン配置を設定
	 */
	// private
	private void setManipulaButtonPosition() {
		VBox.setMargin(buttonPlus, new Insets(5, 5, 5, 5));
		VBox.setMargin(buttonMinus, new Insets(5, 5, 5, 5));
		VBox.setMargin(buttonTimes, new Insets(5, 5, 5, 5));
		VBox.setMargin(buttonDivide, new Insets(5, 5, 5, 5));
		vboxManipulate.getChildren().addAll(
				buttonPlus, buttonMinus, buttonTimes, buttonDivide);
	}

	/*
	 * 各ボタンをまとめてつなぐ関数
	 * (可読性のために敢えて関数にした)
	 */
	// private
	private void setConnectButtons() {
		hboxConnect.getChildren().addAll(
				vboxNumeric, vboxManipulate);
	}

	/*
	 * GridPaneのスペーシングをする関数
	 */
	// private
	private void setPaneSpacing() {
		// GridPaneのマージンを設定
		GridPane.setMargin(hboxConnect, new Insets(20,20,20,20));
	}

	/*
	 * POJOのメイン関数
	 */
	// Application.launch(args)を呼ぶだけ
	// これがないと、起動できない・・・
	public static void main(String[] args) {
		Application.launch(args);
	}

}

~~~

・・・Javaは静的オブジェクト指向言語のため、コンポーネントを静的に生成する。

そのため、ふざけていることに、インスタンス生成を一個一個していかないとエラーになる!!!(悲)

まあ、いいけど。Java好きだし。

 

【以下、とりあえずの実行結果】

ーーー

https://gyazo.com/98c3dfa6c15b150a6f7415148a2d4419

ーーー