Erste Schritte mit JavaFX mit einer App, die den Alkoholgehalt berechnen kann, wenn eine starke Null durch einen Biss geteilt wird

Dieser Artikel ist der 5. Tagesartikel von Mikatus Adventskalender 2019.

Einführung

Magst du Schnaps? Ich liebe Alkohol und __möge Alkohol mag mich auch __ [^ 1]. [^ 1]: Es besteht die Möglichkeit einer unerwiderten Liebe.    Kürzlich wurden verschiedene Dosen-Chu-Hi veröffentlicht, und sobald ich jeden Tag nach Hause gehe, trinke ich etwas, und wenn ich nur trinke, schlafe ich ein.

Allerdings hat die Anzahl der Kauhochs in Dosen heutzutage um 9% oder mehr zugenommen, einschließlich __a bestimmter starker __. Ich neige dazu, etwas mit einem hohen Alkoholgehalt zu kaufen, aber wenn ich über die Gesundheitsgefahren nachdenke, zittere ich und kann nicht schlafen, ohne zu trinken __.

Unter solchen Umständen sagten meine Arbeitskollegen __ "Es ist in Ordnung, wenn Sie es ein wenig teilen" [^ 2] __, und ich war beeindruckt von der Idee, und wie hoch ist der Alkoholgehalt, wenn Sie Alkohol durch Alkohol teilen? ?? Also habe ich eine Desktop-Anwendung mit JavaFX erstellt, um zu berechnen.

[^ 2]: Ich weiß nicht, was in Ordnung ist.

Was ist JavaFX?

Zitiert aus Wikipedia unten

JavaFX ist eine GUI-Bibliothek für Rich Internet Applications (RIA), die auf virtuellen Java-Maschinen ausgeführt wird. Es wird standardmäßig in Java SE 7 Update 2 oder höher installiert. Im Gegensatz zu Swing wird das Design sowohl mit XML als auch mit CSS namens FXML beschrieben.

Grob gesagt fühlt es sich wie ein Nachfolger von Swing an. Swing musste die gesamte Benutzeroberfläche in Java schreiben, was ziemlich höllisch war, aber in JavaFX wurde das Design in eine Datei namens FXML extrahiert, sodass die Benutzeroberfläche anscheinend nicht in Java geschrieben ist.

Umweltbau & Projekterstellung

Ich habe auf diesen Artikel verwiesen. [Für Super-Anfänger] JavaFX-Super-Einführung Die Beschreibung der Projektstruktur und der Hauptklasse wurde vollständig kopiert.

Scene Builder ist sehr praktisch und die Erstellung der Benutzeroberfläche wird durch Ziehen und Ablegen von Teilen abgeschlossen. スクリーンショット 2019-11-25 20.07.49.png Es ist so.

Eine Einschränkung ist, dass Java SE 11 nicht mehr die kostenlose Version von Oracle JDK ist und ich denke, dass die meisten Leute OpenJDK verwenden, aber __OpenJDK enthält kein JavaFX __. Dieses Mal war es mühsam, sich damit zu befassen, also habe ich mich beim Erstellen eines Projekts in Eclipse für Java 8 entschieden.

Übrigens scheint es einen Weg zu geben, damit umzugehen. JavaFX mit OpenJFX + OpenJDK ausführen [Einführung in JavaFX in OpenJDK 11] (https://blogs.osdn.jp/2018/11/12/merge-openjfx.html)

Verknüpfen Sie FXML mit Controller

Wenn Sie eine Benutzeroberfläche mit Scene Builder erstellen und speichern, wird sie als FXML-Datei gespeichert. Klicken Sie hier, um die diesmal erstellte FXML-Datei anzuzeigen

Ohne Titel.fxml


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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.Pane?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <TextField layoutX="69.0" layoutY="98.0" />
      <TextField layoutX="300.0" layoutY="98.0" />
      <TextField layoutX="69.0" layoutY="201.0" />
      <TextField layoutX="300.0" layoutY="201.0" />
      <Button layoutX="503.0" layoutY="201.0" mnemonicParsing="false" text="Berechnung" />
      <Label layoutX="33.0" layoutY="103.0" text="1." />
      <Label layoutX="33.0" layoutY="206.0" text="2." />
      <Label layoutX="240.0" layoutY="103.0" text="ml" />
      <Label layoutX="240.0" layoutY="206.0" text="ml" />
      <Label layoutX="471.0" layoutY="103.0" text="\%" />
      <Label layoutX="471.0" layoutY="206.0" text="\%" />
      <Label layoutX="100.0" layoutY="285.0" prefHeight="48.0" prefWidth="401.0" />
   </children>
</Pane>

Was ich wirklich tun möchte, ist, dass beim Drücken der zu berechnenden Schaltfläche die in den vier Formularen eingegebenen Werte erfasst und berechnet werden, sodass der Tastendruck und die in den vier Formularen eingegebenen Werte als Java-Controller verwendet werden. Wir werden die fxml-Datei so ändern, dass sie von der Klasse akzeptiert werden kann.

Und hier ist das fertige Produkt

Main.fxml


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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.Pane?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.AlcoholController">
   <children>
      <TextField layoutX="69.0" layoutY="98.0" fx:id="amountFst" />
      <TextField layoutX="300.0" layoutY="98.0" fx:id="alcoholFst" />
      <TextField layoutX="69.0" layoutY="201.0" fx:id="amountSec" />
      <TextField layoutX="300.0" layoutY="201.0" fx:id="alcoholSec" />
      <Button layoutX="503.0" layoutY="201.0" mnemonicParsing="false" text="Berechnung" fx:id="button" onAction="#onClick" />
      <Label layoutX="33.0" layoutY="103.0" text="1." />
      <Label layoutX="33.0" layoutY="206.0" text="2." />
      <Label layoutX="240.0" layoutY="103.0" text="ml" />
      <Label layoutX="240.0" layoutY="206.0" text="ml" />
      <Label layoutX="471.0" layoutY="103.0" text="\%" />
      <Label layoutX="471.0" layoutY="206.0" text="\%" />
      <Label layoutX="100.0" layoutY="285.0" prefHeight="48.0" prefWidth="401.0" fx:id="result" />
   </children>
</Pane>

Sie können sehen, dass die Tags, die mit fx: beginnen, hinzugefügt wurden. Beschreiben Sie zunächst den Controller, der der FXML-Datei mit "fx: controller" zugeordnet ist, im Beschreibungsteil des größten Fensters. TextField erhält "fx: id". Dies wird später der Controller-Variablen zugeordnet. Definieren Sie für Button "onClick" mit "onAction". Wenn nun die Taste gedrückt wird, sollte eine Methode namens onClick funktionieren.

Erstellen Sie einen Controller gemäß der obigen FXML.

AlcoholController.java


package controller;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class AlcoholController implements Initializable {

	@FXML
	private TextField amountFst;

	@FXML
	private TextField alcoholFst;

	@FXML
	private TextField amountSec;

	@FXML
	private TextField alcoholSec;

	@FXML
	private Button button;

	@FXML
	private Label result;

	@Override
	public void initialize(URL location, ResourceBundle resources) {

	}

	@FXML
	public void onClick(ActionEvent event) {

	}

}

Es ist so. Durch Hinzufügen von "@ FXML" scheint es mit der zuvor definierten FXML-Datei verknüpft zu sein.

Danach schreiben Sie eine einfache Berechnung auf onClick und es ist abgeschlossen. スクリーンショット 2019-11-25 20.27.26.png Dies ist der Alkoholgehalt, wenn eine lange Dose mit 9% Alkohol durch einen Biss geteilt wird. Sie können sehen, dass es eine sehr gesunde Zahl ist __.

Wenn Sie es danach mit einem ausführbaren JAR aus Eclipse exportieren, ist es eine großartige Anwendung.

Schließlich

Ich habe Swing geschrieben, aber es war viel einfacher als Swing, weil Scene Builder sehr praktisch war. Der Java-Code selbst ist erfrischend und leicht zu lesen, und ich könnte ihn überhaupt lesen, selbst wenn ich ein paar Tage übersprungen hätte und die Tage leer wären.

Die Quelle, die ich dieses Mal geschrieben habe, ist auf Github veröffentlicht. Wenn Sie möchten, beziehen Sie sich bitte darauf. https://github.com/SomeyaHotaka/AlcoholCalc

Mit dieser App möchte ich ein gesundes Leben führen. Wir sehen uns wieder.

Recommended Posts

Erste Schritte mit JavaFX mit einer App, die den Alkoholgehalt berechnen kann, wenn eine starke Null durch einen Biss geteilt wird
Java learning_Behavior, wenn ein Feld mit demselben Namen und eine Methode mit demselben Namen in zwei Klassen in einer Vererbungsbeziehung vorhanden sind