JavaFX-Anwendungsentwicklung mit IntelliJ IDEA und Gradle ~ Von der Umgebungskonstruktion bis zum Beispielcode ~

0. Einleitung

Jetzt steht der Autor unter dem Druck, Software zu erstellen, die die anerkannten GUI-Tools verwendet. ~~ Ich habe es für eine lange Zeit verlassen ~~ Ich habe es vor kurzem gestartet, aber es hat viel Zeit gekostet, eine unerwartete Umgebung aufzubauen, deshalb werde ich es hier als Memorandum schreiben.

1. Was ist JavaFX?

Gibt es jemanden, der "AWT! Swing!" Denkt, wenn Sie GUI in Java sagen? Tatsächlich habe ich gehört, dass die Hürde für die Entwicklung von GUI-Tools in letzter Zeit durch die Einführung eines Frameworks namens JavaFX (nur zuhören) erheblich gesenkt wurde.

Ich fand es zufällig, als ich durch das Netz wanderte: "Ah, GUI? Wie mache ich es?" Heute möchte ich einige Eingänge zu JavaFX vorstellen, die so praktisch sind.

2. Writer-Umgebung

3. Umweltbau

3.1. OpenJDK-Installation

3.1.1. Herunterladen

Laden Sie die Version von JDK, die Sie verwenden möchten, von der Open JDK-Site herunter. Beachten Sie jedoch, dass für JavaFX JDK 11 oder höher erforderlich ist.

■ Die oben genannte Site 191121-0001.png Laden Sie in der Mitte dieses Bildes den Link "tar.gz" rechts von "macOS / x64" herunter. Ich habe 13.0.1 verwendet.

3.1.2. Installation

Extrahieren Sie die heruntergeladene tar.gz-Datei und wechseln Sie in das folgende Verzeichnis. /Library/Java/JavaVirtualMachines

/
└── Library
    └── Java
        └── JavaVirtualMachines
            └── jdk-13.0.1.jdk
                └── Contents
                    └── ...

Führen Sie den folgenden Befehl als Bestätigung aus.

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    13.0.1, x86_64:	"OpenJDK 13.0.1"	/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home
    11.0.2, x86_64:	"OpenJDK 11.0.2"	/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home

Die Ausführungsergebnisse müssen nicht exakt gleich sein. Stellen Sie sicher, dass die gerade installierte Version erkannt wird.

3.2. Projekteinrichtung

3.2.1. Projekt erstellen

Starten Sie IntelliJ IDEA und erstellen Sie ein neues Projekt unter Neues Projekt erstellen. Dieses Mal werden wir JavaFX mit Gradle verwenden, also erstellen wir natürlich ein Gradle-Projekt.

■ Projekterstellungsbildschirm 191121-0002.png Bitte setzen Sie das Project SDK auf 13.

Geben Sie im nächsten Bildschirm GroupId und ArtifactId an.

Auf dem nächsten Bildschirm haben Sie Ihr Projekt eingerichtet, aber ich lege mich im Grunde nicht damit an. Sie müssen lediglich sicherstellen, dass Ihre Gradle JVM 13 ist.

Nachdem Sie den Ordner angegeben haben, der auf dem nächsten Bildschirm verwendet werden soll, wird das Projekt erstellt. Warten wir eine Weile, bis die verschiedenen Prozesse abgeschlossen sind.

3.2.2.build.gradle-Einstellungen

** Füge ** den folgenden Teil zu build.gradle hinzu. Ich habe nichts bearbeitet, was nicht geschrieben wurde.

build.gradle


plugins {
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

dependencies {
    //Diese runtimeOnly-Gruppe dient zur Herstellung plattformübergreifender Gläser.
    //Sie können die Größe der JAR-Datei reduzieren, indem Sie unnötige Elemente löschen.
    runtimeOnly "org.openjfx:javafx-base:$javafx.version:win"
    runtimeOnly "org.openjfx:javafx-base:$javafx.version:linux"
    runtimeOnly "org.openjfx:javafx-base:$javafx.version:mac"
    runtimeOnly "org.openjfx:javafx-controls:$javafx.version:win"
    runtimeOnly "org.openjfx:javafx-controls:$javafx.version:linux"
    runtimeOnly "org.openjfx:javafx-controls:$javafx.version:mac"
    runtimeOnly "org.openjfx:javafx-fxml:$javafx.version:win"
    runtimeOnly "org.openjfx:javafx-fxml:$javafx.version:linux"
    runtimeOnly "org.openjfx:javafx-fxml:$javafx.version:mac"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:win"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:linux"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:mac"
}

javafx {
    version = "13"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

mainClassName = 'maru.test.Launcher'
jar {
    manifest {
        attributes 'Main-Class': 'maru.test.Launcher'
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

■ Jetzt sieht es so aus (der untere Teil ist ein wenig geschnitten) 191122-0003.png

3.2.3. Implementierung des Beispielcodes

Der Beispielcode wurde von OpenJFX Official ausgeliehen.

src/main/java/maru/test/Launcher.java


package maru.test;

import javafx.application.Application;

public class Launcher {
    public static void main(String... args){
        Application.launch(MainApp.class);
    }
}

src/main/java/maru/test/MainApp.java


package maru.test;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class MainApp extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("scene.fxml"));
        
        Scene scene = new Scene(root);
        scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm());
        
        stage.setTitle("JavaFX and Gradle");
        stage.setScene(scene);
        stage.show();
    }
}

src/main/java/maru/test/FXMLController.java


package maru.test;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

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

public class FXMLController implements Initializable {
    
    @FXML
    private Label label;
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        label.setText("Hello, JavaFX " + javafxVersion + "\nRunning on Java " + javaVersion + ".");
    }
}

src/main/resources/maru/test/scene.fxml


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

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.StackPane?>


<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="maru.test.FXMLController">
    <children>
        <Label fx:id="label" text="Label" />
    </children>
</StackPane>

src/main/resources/maru/test/styles.css


.label {
    -fx-text-fill: blue;
}

■ So. 191122-0004.png

3.2.4 Kompilieren und ausführen

Klicken Sie oben rechts auf Gradle und führen Sie Aufgaben> Erstellen> Erstellen aus. Führen Sie anschließend Aufgaben> Anwendung> etwas weiter oben aus.

■ Dies ist 191122-0005.png Wenn Sie so etwas sehen, sind Sie erfolgreich!

■ "So" 191121-0006.png Ich denke, Sie haben eine JAR-Datei in "build / libs /". ~~ Diese JAR-Datei ist eine fette JAR-Datei (eine JAR-Datei, die auch Bibliotheken enthält), daher sollte sie auf jedem PC funktionieren. ~~ ** Es tut mir leid, dass ich wahrscheinlich gelogen habe. Wenn Sie fettes Glas wollen, fügen Sie Schatten hinzu. ** ** **

3.2.5. Wo sich die Beschreibung abhängig von der Ordnerstruktur ändert

Bitte ändern Sie den von <> umgebenen Ort nach Ihren Wünschen. Es werden nur die Teile extrahiert, die von der Ordnerstruktur abhängen.

Dateiname
build.gradle 2 Plätze
Launcher.java Ein Platz
MainApp.java 2 Plätze
scene.fxml Ein Platz

build.gradle


mainClassName = '<Klassen für Starter, die nicht von der Anwendungsklasse erben>'
jar {
    manifest {
        attributes 'Main-Class': '<Gleich wie mainClasName oben>'
    }
}

Launcher.java


public static void main(String... args){
    Application.launch(<Klasse, die von der Anwendungsklasse erbt>.class);
}

MainApp.java


@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("<fxml Datei>"));
    scene.getStylesheets().add(getClass().getResource("<CSS-Datei>").toExternalForm());
}

scene.fxml


<StackPane (Unterlassung) fx:controller="<Controller-Klasse>">

Wahrscheinlich vorbei. Es tut mir leid, wenn es ein Versehen gibt. .. ..

4. Schließlich

Wie war es? War es nicht einfacher als ich erwartet hatte?

Übrigens ist SceneBuilder praktisch zum Erstellen von Bildschirmen. Sie können dies auch tun, indem Sie IntelliJ IDEA einstellen.

■ So etwas 191122-0001.png Ich denke, dies hat die Hürden für die Entwicklung von GUI-Anwendungen gesenkt. Genießen Sie eine gute Lebensdauer der GUI-Anwendung!

5. Referenzen

Recommended Posts

JavaFX-Anwendungsentwicklung mit IntelliJ IDEA und Gradle ~ Von der Umgebungskonstruktion bis zum Beispielcode ~
[Jakarta EE 8 Anwendungsentwicklung mit Gradle] 1. Umgebungskonstruktion
Erstellung einer Java-Webanwendungsentwicklungsumgebung mit VS-Code (struts2)
Erstellen einer PostgreSQL-Umgebung mit Docker (vom Setup bis kurz vor der Entwicklung)
Erstellen einer Entwicklungsumgebung mit IntelliJ IDEA + Maven + Tomcat 9
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Erstellen Sie mit IntelliJ IDEA eine Entwicklungsumgebung "Spring Thorough Introduction"
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Erstellen Sie eine Java- und JavaScript-Teamentwicklungsumgebung (Gradle-Umgebungskonstruktion)
Umgebungskonstruktion für die Entwicklung von Servlet-Anwendungen
Hinweise zum Erstellen der Kotlin-Entwicklungsumgebung und zur Migration von Java nach Kotlin
Entwicklung von Spring5 MVC-Webanwendungen mit Visual Studio Code Environment-Konstruktion (Installation von JDK11 / Maven / Tomcat / Visual Studio Code)
Konstruktion der Minecraft Mod-Entwicklungsumgebung (IntelliJ IDEA + Minecraft Forge 1.15.2) + Hello World Mod-Erstellung
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Java EE 8 (unter Verwendung von NetBeans IDE 8.2) ab Beispielcode Teil 1 Umgebungskonstruktion
Bereiten Sie die Java-Entwicklungsumgebung mit VS Code vor
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Zusammenfassung der Umgebungskonstruktion mit rvm und postgresql
So geben Sie ein Glas mit der von gradle in IntellijIDEA angegebenen Hauptklasse aus
Versuchen Sie, mit Minecraft Forge 1.15.1 zu modifizieren. ① [Gebäudeentwicklungsumgebung] [Mehrere Versionen werden unterstützt] [IntelliJ IDEA]
Vom Erstellen eines Spring Boot-Projekts bis zum Ausführen einer Anwendung mit VS Code
Einführung in den Roboterkampf mit Robocode (Umgebungskonstruktion)
Java GUI Beispiel
Ein Memorandum beim Versuch, eine GUI mit JavaFX zu erstellen
Beispiel für eine serielle Kommunikation mit jSerialComm
Beispiel für eine serielle Kommunikation mit purejavacomm
Beispiel zum Erstellen einer GUI-Anwendung mit JavaFX + IntelliJ + Scene Builder
Beispielcode mit Minio aus Java
Beispielcode für die Singleton-Implementierung mit enum
[Jakarta EE 8 Anwendungsentwicklung mit Gradle] 2. Projekterstellung
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
JavaFX-Anwendungsentwicklung mit IntelliJ IDEA und Gradle ~ Von der Umgebungskonstruktion bis zum Beispielcode ~
Java GUI Beispiel
Ein Memorandum beim Versuch, eine GUI mit JavaFX zu erstellen
Beispiel für eine serielle Kommunikation mit jSerialComm
Beispiel für eine serielle Kommunikation mit purejavacomm
Beispiel zum Erstellen einer GUI-Anwendung mit JavaFX + IntelliJ + Scene Builder
Beispielcode mit Minio aus Java
Beispielcode für die Singleton-Implementierung mit enum
Ein Memorandum beim Versuch, eine GUI mit JavaFX zu erstellen
[Hinweis] Szenenübergang mit JavaFX
Vorbereiten der Erstellung einer Rails-Anwendung
Einfache Möglichkeit, ein eigenes Anwendungslogo zu erstellen (einfach mit Ihrem Smartphone)
Erstellen Sie mit Dropwizard eine einfache Webanwendung
Beispiel zum Erstellen eines benutzerdefinierten Tags für JSP
Beispiel zum Starten von Ubuntu mit Deployment mit Client-Go
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code auf dem Mac
Einführung in Slay the Spire Mod Development (2) Konstruktion der Entwicklungsumgebung
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Bereiten Sie die Umgebung für Java11 und JavaFx mit Ubuntu 18.4 vor
So installieren Sie Gradle und Kotlin mit SDKMAN (Mac)
Erstellen Sie eine Java-Programmentwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Java + Spring-Entwicklungsumgebung mit VirtualBox + Ubuntu (Xfce4).
Ich war süchtig nach WSl, als ich versuchte, mit Vue.js eine Entwicklungsumgebung für Android-Anwendungen zu erstellen