Frohe Weihnachten mit JavaFX !!

Adventure Co., Ltd., die die Ticketreservierungsseite skyticket betreibt: bow:

skyticket bietet verschiedene Dienstleistungen im Zusammenhang mit Reservierungen an, die sich auf Reisen von verschiedenen Geräten (Computer, Smartphones, Tablets) konzentrieren.

Wir entwickeln auch Apps für Smartphones: iphone:

[Skyticket: Android-Versions-App] </ b> qiita-square

Es ist eine sehr erfrischende Seite, die auf blue </ font> basiert: Flugzeug: Tina Tamaki ist sehr nett: entspannt :: entspannt :: entspannt:

1. Was soll ich tun?

Übrigens, dieses blaue </ font> Keynote-Skyticket: Flugzeug: Da es sich um ein Adventskalendermaterial handelt, denke ich, dass es wie Weihnachten </ font> aussehen wird: christums_tree:

Verwenden Sie "JavaFX", um eine Skyticket-Desktop-App zu erstellen: Computer :. Das heißt, die Bildschirmanzeige ist eine Webansicht ... Glitter sieht aus wie: star :: star :: star:

2. Umwelt

  1. OpenJDK 11 Ich werde "Java 11" verwenden, das im September 2018 veröffentlicht wurde. https://jdk.java.net/11/
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
  1. OpenJFX 11 Da Java 11 nicht mehr in OpenJDK (auch in Oracle JDK) enthalten ist, werden wir es separat vorbereiten: Computer:

https://openjfx.io/openjfx-docs/ ↑ Umgebungseinstellungen und Ausführungsverfahren sind einfach zu schreiben. Es gibt auch ein Verfahren mit Maven`` Gradle: entspannt:

javafx.version=11.0.1
javafx.runtime.version=11.0.1+1
javafx.runtime.build=1
  1. Scene Builder 11 Verwenden Sie "Gluon". XML-Handschrift ist schwer: senior_man_tone1: Da die RC-Version für "Java 11" veröffentlicht wurde, werde ich diese verwenden. https://gluonhq.com/products/scene-builder/
Version 11.0.0
  1. IDE Verwenden Sie "Eclipse". https://www.eclipse.org/downloads/
Eclipse IDE for Java Developers
Version: 2018-09 (4.9.0)
Build id: 20180917-1800
  • Fügen Sie auch das Eclipse-Plug-In hinzu. Es ist einfach, weil es eine Vorlage für das JavaFX-Projekt erstellt: ok_woman_tone1:
e(fx)clipse 3.4.1

3. Ich habe es geschafft

1. JavaFX-Projekterstellung

Erstellen Sie ein JavaFX-Projekt mit "Eclipse".

Klicken Sie hier für die Prozedur (: beach_umbrella: Drücken Sie, um die Prozedur zu öffnen / schließen: beach_umbrella :)
  ・ Vorgehensweise 1. Projektauswahl   `File` → `New Project...` ![image.png](https://qiita-image-store.s3.amazonaws.com/0/315651/f37cc4d4-28e0-e3f1-7ae3-c58f67f915c5.png) `Java FX Project` → **Next >** ![image.png](https://qiita-image-store.s3.amazonaws.com/0/315651/0f5bc8ba-05b8-0dd4-efd7-c21604686c2e.png)
・ Vorgehensweise 2. Geben Sie den Projektnamen ein ![jjj.png](https://qiita-image-store.s3.amazonaws.com/0/315651/6751e8bb-f181-3cc5-22bf-6f2b14016a3a.png) Project name:`application` → **Next >**
・ Schritt 3. Java-Einstellungen ![image.png](https://qiita-image-store.s3.amazonaws.com/0/315651/71c19bc6-a2f3-d017-d891-6a1b5939d774.png) Sonomama ** Weiter> **
・ Vorgehensweise 4. JavaFX-Einstellung ![image.png](https://qiita-image-store.s3.amazonaws.com/0/315651/fd25680a-60d0-c279-4826-42a2414967a8.png)

Geben Sie ** Fertig ** wie folgt ein

Projekt Einstellungen Wert einstellen
Application type Desktop
Package Name jp.skytikcet
Declarative UI -
├Language FXML
├Root-Type javafx.scene.layout.AnchorPane
├File Name Skyticket
└Controller Name SkyticketController

-Konfiguration von Verzeichnissen und Dateien nach dem Erstellen eines JavaFX-Projekts

application
│  .classpath
│  .project
│  build.fxbuild
│
├─.settings
│      org.eclipse.jdt.core.prefs
│
├─bin
│  └─jp
│      └─skyticket
│              Main.class
│              SkyticketController.class
│              Skyticket.fxml
│              application.css
│
└─src
    └─jp
        └─skyticket
                Main.java                  
                SkyticketController.java   
                Skyticket.fxml             
                application.css            

2. FXML-Änderung

Wir werden das Layout von Skyticket.fxml mit Scene Builder (GUI) ändern. Stellen Sie außerdem "fx: id" (entsprechend den Feldern) und "On Action" (entsprechend den Methoden) ein, um auf dem Controller zu arbeiten. ↓ Die angestrebte Layoutstruktur ist wie folgt. image.png

Klicken Sie hier für die Prozedur (: beach_umbrella: Drücken Sie, um die Prozedur zu öffnen / schließen: beach_umbrella :)
  ・ Vorgehensweise 1. Starten Sie Screen Builder

Wählen Sie Skyticket.fxml und klicken Sie mit der rechten Maustaste, um ScreenBuilder mit "Mit ScreenBuilder öffnen" zu starten. (Wenn ScreenBuilder nicht gestartet wird, wird der Pfad von "Fenster" → "Einstellungen" → "JavaFX" zu "SceneBuilder.exe" festgelegt.) image.png

Die Standardeinstellung ist dies. image.png


・ Schritt 2. Ankerfensterlayout Zuerst von Anchor Pane. Stellen Sie die Breite und Höhe ein. Standardmäßig ist die Mindestregion (USE_COMPUTED_SIZE) festgelegt. Schreiben Sie sie daher neu. Ich habe es zu einer Smartphone-ähnlichen Größeneinstellung gemacht. image.png

Und fx: id. Stellen Sie die ID für den Zugriff auf die Komponente auf der Controllerseite ein. (Wenn Sie die Komponente nicht über die Steuerung bedienen, ist keine Einstellung erforderlich.) image.png

  • Die FXML- und Controller-Zuordnung fx: controller ist bereits standardmäßig eingestellt.

・ Schritt 3.webView-Layout Dann webView Platzieren Sie durch Ziehen und Ablegen von den Steuerelementen auf der linken Seite. image.png

Geben Sie auch die Breite und Höhe für "WebView" an und setzen Sie "fx: id". image.png


・ Schritt 4. Tastenlayout Platzieren Sie es auf ähnliche Weise durch Ziehen und Ablegen von den Steuerelementen auf der linken Seite. ![image.png](https://qiita-image-store.s3.amazonaws.com/0/315651/297280ec-cd7c-fc5d-164d-50345ae48b06.png)

Geben Sie die Breite und Höhe auf die gleiche Weise an und setzen Sie "fx: id". image.png

Stellen Sie außerdem den Ereignishandler (Methodenname) ein, wenn die Schaltfläche in "On Action" gedrückt wird.

Stellen Sie die restlichen Tasten auf die gleiche Weise ein. (Verschiedenes: senior_man_tone1:


・ Endgültiges Layout image.png

· Endgültige FXML

Skyticket.fxml


<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.web.WebView?>

<AnchorPane fx:id="ap" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="812.0" prefWidth="375.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="jp.skyticket.SkyticketController">
   <children>
      <WebView fx:id="webView" layoutX="0" layoutY="34.0" prefHeight="802.0" prefWidth="365.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
      <Button text="Reservierung" fx:id="btnToppage" onAction="#toppage" layoutX="0" layoutY="712.0" prefHeight="100.0" prefWidth="125.0" mnemonicParsing="false" />
      <Button text="Meine Seite" fx:id="btnMypage" onAction="#mypage" layoutX="125.0" layoutY="712.0" prefHeight="100.0" prefWidth="125.0" mnemonicParsing="false"  />
      <Button text="Nicht schieben" fx:id="btnSetting" onAction="#setting" layoutX="250.0" layoutY="712.0" prefHeight="100.0" prefWidth="125.0" mnemonicParsing="false"  />
   </children>
</AnchorPane>

Dies ist die Layouterstellung.

3. CSS-Fix

Ändern Sie dann das CSS.

application.css


/*Normaler Stil*/
.button {
  -fx-border-color: white;
  -fx-background-color: #0896ff;
}
/*Weihnachtsstil*/
.button.christmas {
  -fx-background-color: #b79e00;
  -fx-font-family: 'Fuuji'
}

Erstellen Sie außerdem eine neue skyticket.css zur Dekoration der Webansicht.

4. Änderungen der Haupt- und Controller-Klasse

Ändern Sie dann die Java-Dateien (hauptsächlich den Controller).

Zuallererst die Hauptklasse. Es ist ein JavaFX-Einstiegspunkt. Ich habe gerade die Standardeinstellungen verlassen und die Größe der Szene geändert und den Titel festgelegt.

Main.java


package jp.skyticket;
	
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.fxml.FXMLLoader;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
        	AnchorPane root = FXMLLoader.load(getClass().getResource("Skyticket.fxml"));
            Scene scene = new Scene(root, 375, 812); //Größe korrigieren
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setTitle("Merry Christmas!!"); //Titeleinstellungen hinzugefügt
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

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

Dann die Controller-Klasse. Beschreiben Sie Felder (Bildschirmkomponenten) und Methoden (Ereignisse). Durch Hinzufügen der Annotation @FXML </ font> wird diese mit FXML in Verbindung gebracht und kann auf der Controllerseite betrieben werden. (Aber ich frage mich, ob die Controller-Quelle automatisch aus FXML generiert werden kann: santa_tone2:

SkyticketController.java


package jp.skyticket;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class SkyticketController  {
        //Bildschirmkomponenten
        @FXML private AnchorPane ap;
        @FXML private WebView webView;
        @FXML private Button btnMypage;
        @FXML private Button btnToppage;
        @FXML private Button btnSetting;

        private WebEngine webEngine;

        /**
         *Initialisieren
         *- Stellen Sie die UA ein und zeichnen Sie den oberen Bildschirm.
         * 
         * @param event
         */
	    @FXML
	    private void initialize() {   
	    	this.webEngine = this.webView.getEngine();
	    	//Ich möchte die Seite für Smartphones anzeigen, also UA-Einstellungen
	    	this.webEngine.setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/61.0.3163.73 Mobile/15A372 Safari/602.1");
	    	this.webEngine.load("https://skyticket.jp");
	    }
        /**
         *Ereignishandler, wenn btnMypage gedrückt wird
         *-Zeichne meine Seite.
         * 
         * @param event
         */
	    @FXML
	    private void mypage(ActionEvent event) {
	    	this.webEngine.load("https://skyticket.jp/user/");
	    }
        /**
         *Ereignishandler, wenn btnToppage gedrückt wird
         *-Zeichnen Sie den oberen Bildschirm.
         * 
         * @param event
         */
	    @FXML
	    private void toppage(ActionEvent event) {
	    	this.webEngine.load("https://skyticket.jp");
	    }
        /**
         *Ereignishandler, wenn btnSetting gedrückt wird
         *- Fügen Sie dem Button eine Dekorationsklasse hinzu.
         *- Wenden Sie CSS für Weihnachten an.
         *-Zeichnen Sie den oberen Bildschirm.
         * 
         * @param event
         */
	    @FXML
	    private void setting(ActionEvent event) {
	    	//Stellen Sie Klassen für den Weihnachtsdekorationsstil auf verschiedenen Knöpfen ein
	    	this.btnMypage.getStyleClass().add("christmas");
	    	this.btnToppage.getStyleClass().add("christmas");
	    	this.btnSetting.getStyleClass().add("christmas");

	    	//Webview CSS-Anwendung für Weihnachten
	    	this.webEngine.setUserStyleSheetLocation(getClass().getResource("skyticket.css").toString());
	    	
	    	this.webEngine.load("https://skyticket.jp");
	    }
}

Damit ist die Erstellung abgeschlossen.

4. Ich habe versucht mich zu bewegen

Zunächst die Erstanzeige. Die Webansicht funktioniert normal. qiita-square

Die unteren Schaltflächen "Yoyaku" und "Meine Seite" sind ebenfalls schön. Sie können Tickets auch normalerweise beantragen: Flugzeug: qiita-square

Zum Schluss die Taste "Nicht drücken" qiita-square

Überhaupt ...

Nicht schieben ...       Mit dem Weihnachtsmann

Oyakusoku       Überhaupt ...

: no_good: Schieben Sie es hier überhaupt nicht: no_good_tone3:
  :christmas_tree::christmas_tree::christmas_tree:Merry Christmas:christmas_tree::christmas_tree::christmas_tree: qiita-square

Der Darsteller ist Advens "Harutan", Regisseur Haruki. Onkel Love: heart_eyes :: heart_eyes :: heart_eyes:

Dann habt alle ein schönes Weihnachtsfest ~: christus_tree :: santa_tone2 :: christus_tree:

das ist alles!