[JAVA] Hallo Welt mit Kotlin und Tornado FX

Hallo Welt mit Kotlin und Tornado FX

Einführung

JavaFX ist eine GUI-Bibliothek, die es einfach macht, eine coole GUI zu erstellen, die auf dem Desktop auf einem sogenannten PC ausgeführt wird. Da es sich um eine Java-Bibliothek handelt, kann sie in einer Umgebung verwendet werden, in der Java SE (Java Platform, Standard Edition) ausgeführt wird. Dies ist ein PC mit Betriebssystemen wie Linux, MacOS und Windows. Da die kompilierte Ergebnisbinärdatei (Java-Bytecode), die eine Funktion von Java-Programmen ist, unabhängig vom Betriebssystem üblich ist, können auf einem Betriebssystem erstellte Programme so ausgeführt werden, wie sie auf einem anderen Betriebssystem sind.

Java als Programmiersprache konzentriert sich auf die Funktionalität der objektorientierten Programmierung. In letzter Zeit haben wir die Funktionen anderer fortgeschrittener Programmiersprachen integriert, beispielsweise die Funktionen der funktionalen Programmierung, aber es gibt einige unzureichende Punkte im Vergleich zu den Funktionen fortgeschrittener Programmiersprachen. Java als Umgebung verfügt jedoch über eine Fülle von Standardbibliotheken, eine große Anzahl von Bibliotheken und Tools von Drittanbietern, und das Java-Ökosystem ist sehr stark und übertrifft das anderer Sprachen.

Obwohl der Quellcode eine andere Programmiersprache als Java ist, gibt es hier eine Programmiersprachengruppe namens JVM-Sprache, die in der Java-Ausführungsumgebung ausgeführt werden kann, wenn das Kompilierungsergebnis zu Java-Bytecode wird. Typische JVM-Sprachen sind neue Sprachen wie Scala, Groovy, Clojure und Kotlin sowie vorhandene Programmiersprachen wie JRuby und Jython, die auf Java ausgeführt werden.

In diesen JVM-Sprachen stehen zahlreiche Java-Standardbibliotheken und Bibliotheken von Drittanbietern zur Verfügung. Daher können Sie die umfangreichen Ressourcen von Java nutzen, während Sie die erweiterte Programmierung mit der JVM-Sprache durchführen.

Kotlin, eine der JVM-Sprachen, ist eine Programmiersprache, die die Eigenschaften von Java als Allzweck-Programmiersprache erbt, jedoch präziser, produktiver und sicherer programmieren kann. Darüber hinaus legen wir Wert auf die Interoperabilität mit Java. Sie ist so konzipiert, dass nicht nur Java von Kotlin aus aufgerufen werden kann, sondern auch Kotlin von Java aus.

Wenn Sie JavaFX von Kotlin verwenden, können die für Kotlin spezifischen Funktionen (präziser / produktiver / sicherer) nicht vollständig genutzt werden, indem Sie direkt auf die JavaFX-API klicken. Aus diesem Grund wurde TornadoFX entwickelt, eine Bibliothek, die JavaFX gründlich in den Kotlin-Stil umgestaltet hat.

Dieser Artikel ist der nächste Artikel, der ein sogenanntes Hello World-ähnliches Programm mit einer kleinen Bewegung wie JavaFX erstellt.

Nächster Artikel über das Erstellen dieses Programms mit Kotlin

Als dritter Teil wird es erstellt, indem JavaFX von Kotlin über TornadoFX aufgerufen wird.

Kotlin und Tornado FX Programmierumgebung

Die Kotlin-Programmierumgebung verwendet IntelliJ IDEA Community Edition [^ 1].

[^ 1]: IntelliJ IDEA ist ein Programmiertool (integrierte Entwicklungsumgebung IDE), das von JetBrains entwickelt und verkauft wird. Die Community Edition ist in ihrer Funktionalität eingeschränkt, wird jedoch kostenlos zur Verfügung gestellt. Die Kotlin-Entwicklungsumgebung ist standardmäßig in der Community Edition enthalten. Es gibt auch ein TornadeFX-Plug-In.

Schreib- / Überprüfungsumgebung für diesen Artikel

Artikel Inhalt
CPU AMD Phenom® 1055T (6 Kerne)
OS Japanische Windows 10 64-Bit-Version
Erinnerung 16GB
Grafik NVIDIA GeForce GTX 760
Scheibe SATA SSD 500GB
JDK Oracle JDK 9.0.4
IntelliJ IDEA 2017.3.5 Community Edition
TornadoFX 1.7.14

IntelliJ IDEA Download-URL https://www.jetbrains.com/idea/download/

IntelliJ IDEA wendet ein japanisches Lokalisierungstool namens Pleiades an, um es zu japanisieren. Bei der Beschreibung der Funktionsweise von IntelliJ IDEA in diesem Artikel werden die Namen von Menüs, Schaltflächen, Registerkarten usw. verwendet, die ins Japanische übersetzt wurden. Japanisches Handbuch für IntelliJ-basierte Produkte

URL für Oracle JDK 9.0.4 herunterladen http://www.oracle.com/technetwork/java/javase/downloads/index.html

Installieren des TornadoFX-Plug-Ins

Installieren Sie das Tornado FX-Plug-In auf IntelliJ IDEA.

image.png

image.png

TornadoFX ist im linken Bereich vorhanden. Wenn Sie es auswählen, werden die Maven- oder Gradle-Projekttypen im rechten Bereich aufgelistet.

Gradle-Installation

Gradle im Gradle-Plug von IntelliJ IDEA ist ab dem 15. März 2018 Version 4.0. Die Verwendung mit JDK 9 führt zu einem Fehler.

Could not determine java version from '9.0.4'.

Da JDK 9 Gradle 4.2.1 oder höher unterstützt, ist es in diesem Fall besser, Gradle 4.2.1 oder höher lokal anstelle von Gradle Wrapper zu installieren und zu verwenden.

Erstellen eines MessageBoard-Projekts

image.png

Standardmäßig werden ein Verzeichnis, eine Konfigurationsdatei und eine Beispielquelldatei generiert. Außerdem werden Sie im Statusbereich (am unteren Rand des IntelliJ IDEA-Bildschirms) aufgefordert, Gradle zu importieren.

image.png

Klicken Sie auf das Benachrichtigungssymbol in der unteren rechten Ecke des IntelliJ IDEA-Bildschirms, um das Ereignisprotokoll mit der Nachricht zu öffnen. Unmittelbar nach dem Erstellen eines neuen Projekts wurde die durch die Abhängigkeit definierte Bibliothek noch nicht heruntergeladen. Importieren Sie daher zuerst Gradle. Klicken Sie in der Nachricht im Bereich Ereignisprotokoll auf Gradle-Projekt importieren. Klicken Sie hier, um den Bildschirm "Module aus Gradle importieren" zu öffnen [^ 2].

[^ 2]: Als ich diesen Bildschirm mit [Abbrechen] schloss, fiel es mir schwer, nicht zu wissen, wo ich diesen Bildschirm das nächste Mal aufrufen soll. Der Link in der Ereignisprotokollnachricht wurde abgeblendet und der Link war ungültig. Außerdem enthalten die Menüelemente, die im Menü Ansicht> Werkzeugfenster geöffnet werden, Gradle nicht. Nachdem ich IntelliJ IDEA geschlossen und erneut gestartet hatte, wurde der Link in der Ereignisprotokollnachricht aktiviert und ich konnte den Bildschirm endlich wieder öffnen.

image.png

Klicken Sie auf die Schaltfläche [OK], um die Einstellung zu starten.

In einer Umgebung, in der sich eine Firewall in der Internetverbindung befindet, muss möglicherweise ein Proxyserver eingerichtet werden, aber ich werde die Erklärung in diesem Artikel [^ 3] weglassen.

[^ 3]: Dieser Artikel wurde zu Hause ohne Proxyserver geschrieben.

Ausführung des von der Vorlage generierten Programms

Das vom TornadoFX-Plug-In generierte Projekt enthält drei Quelldateien als Demo-Code: MyApp, Styles und MainView. Durch das Erstellen und Ausführen wird bestätigt, ob die Programmierumgebung korrekt erstellt wurde.

Wenn Sie das Menü Ausführen öffnen, sind Ausführen, Debuggen und Ausführen mit Abdeckung deaktiviert. Zunächst müssen Sie die Starteinstellungen konfigurieren. Am einfachsten ist es, mit der rechten Maustaste auf die App Inheritance-Klassendatei (MyApp im Demo-Code) zu klicken, die der Einstiegspunkt für die Ausführung des Programms ist, und Ausführen auszuwählen.

Bei Erfolg wird der folgende Bildschirm angezeigt.

image.png

Wenn Sie von nun an das Menü "Ausführen" öffnen, werden "Ausführen", "Debuggen" und "Mit Abdeckung ausführen" aktiviert. Wenn Sie das Menü [Ausführen]> [Startkonfiguration ausführen] auswählen, wird den Optionen [MyApp] hinzugefügt.

Erste Tornado FX Programmierung

Wenn Sie ein TornadoFX-Projekt generieren, wird Demo-Code generiert. Werfen Sie diese jedoch weg und erstellen Sie die folgenden zwei Klassen:

Name der Klasse Inhalt
MessageBoardApp Eine Klasse, die die TornadoFX-App erbt, die die JavaFX-Anwendungsklasse umschließt
MessageBoardView Eine Klasse, die die Ansicht von TornadoFX erbt und ein Szenendiagramm zeigt

Im Demo-Code wurde das Paket in App und Ansicht unterteilt, aber dieses Mal werden wir es in dasselbe Paket einfügen.

MessageBoardApp.kt


package com.torutk.messageboard

import tornadofx.App

class MessageBoardApp: App(MessageBoardView::class)

MessageBoardApp erbt die App-Klasse von TornadoFX, die die Application-Klasse von JavaFX erbt, und empfängt die MessageBoardView-Klasse, die die Ansicht (Szenendiagramm) als Argument des primären Konstruktors definiert. Es gibt überhaupt keine Code-Implementierung. In der Anwendungsvererbungsklasse von JavaFX habe ich den Routinecode geschrieben, der die Startmethode überschreibt und mit Stage und Scene herumspielt. TornadoFX macht das Schreiben dieses Routinecodes überflüssig.

MessageBoardView.kt


package com.torutk.messageboard

import javafx.scene.Group
import javafx.scene.text.Text
import tornadofx.*

class MessageBoardView : View() {
    override val root = Group()

    init {
        val message = Text("Hello, Kotlin. This is TornadoFX.")
        message.layoutY = 50.0
        root += message
    }
}

MessageBoardView erbt die View-Klasse von TornadoFX, generiert die JavaFX-Gruppe als Stammknoten und generiert Text als untergeordneten Knoten der Gruppe, um das Szenendiagramm zu erstellen. Da der Stammknoten in der View-Klasse als Eigenschaft definiert ist, überschreiben Sie ihn mit override, um den untergeordneten Knoten zu definieren. Durch Überschreiben der Root-Eigenschaft wird eine Instanz der Group-Klasse erstellt und zugewiesen.

Der Init-Block ist ein Initialisierungsblock. Da der Primärkonstruktor nur Eigenschaften definieren kann, wird der im Init-Block geschriebene Code beim Instanziieren mit dem Primärkonstruktor ausgeführt. Sie können auf Eigenschaften im Init-Block verweisen.

In diesem Init-Block wird Text instanziiert, positioniert (layoutY) und als untergeordneter Knoten zum Stammknoten hinzugefügt. Das Hinzufügen von untergeordneten Knoten zum Stammknoten verwendet eine Operatorüberladung.

Lass es uns laufen.

image.png

Tornado FX-ähnliches Schreiben

Wenden Sie das Builder-Muster an und definieren Sie den Text im Stammknoten

Es werden Funktionen zum Generieren von JavaFX-Steuerelementen bereitgestellt. Diese nehmen am Ende des Arguments einen Lambda-Ausdruck an.

Der folgende Code definiert eine Builder-Gruppenfunktion, die eine Gruppe am Stammknoten erstellt, und verwendet eine Builder-Textfunktion, die einen Text darin erstellt.

MessageBoardView.kt


class MessageBoardView : View() {
    override val root = group {
        text("Hello, Kotlin. This is TornadoFX.") {
            layoutY = 50.0
        }
    }
}

Auf diese Weise kann die hierarchische Struktur des Szenendiagramms durch eine verschachtelte Struktur dargestellt werden.

Text animieren

Die fließende Nachricht verwendet die TranslateTransition von JavaFX. In TornadoFX beschreibt die Erweiterungsfunktion move eine Animation mit TranslateTransition.

MessageBoardView.kt


class MessageBoardView : View() {
    override val root = group {
        text("Hello, Kotlin. This is TornadoFX.") {
            layoutY = 50.0
            move(Duration.seconds(8.0), Point2D(-layoutBounds.width, 0.0), Interpolator.LINEAR, play = true) {
                fromX = layoutBounds.width
                cycleCount = Animation.INDEFINITE
            }
        }
    }
}

Die Verschiebungsargumente geben die Dauer, das Ziel, die Interpolationsmethode und an, ob die Animation sofort ausgeführt werden soll. Da die Verschiebungsquelle und die Anzahl der Wiederholungen im Verschiebungsargument nicht angegeben wurden, werden sie im Lambda-Ausdruck angegeben.

Ich werde das machen.

run-1.gif

Geben Sie das Erscheinungsbild für Text an

In TornadoFX wird das Erscheinungsbild von Schriftarten und Farben durch CSS definiert, das von Kotlins DSL realisiert wird. Diesmal wird es jedoch von der JavaFX-API anstelle von CSS definiert, um fließende Animationen zu ermöglichen.

MessageBoardView.kt


class MessageBoardView : View() {
    override val root = group {
        text("Hello, Kotlin. This is TornadoFX.") {
            font = Font.font("Serif", FontWeight.SEMI_BOLD, 32.0)
            fill = Color.DARKMAGENTA
            layoutY = 50.0
            move(Duration.seconds(8.0), Point2D(-layoutBounds.width, 0.0), Interpolator.LINEAR, play = true) {
                fromX = layoutBounds.width
                cycleCount = Animation.INDEFINITE
            }
        }
    }
}

Ich werde das machen.

run-2.gif

Recommended Posts

Hallo Welt mit Kotlin und Tornado FX
Hallo Welt mit Kotlin und JavaFX
Hallo Welt mit GWT 2.8.2 und Maven
"Hallo Welt!" Mit Kotlin + CLI in 5 Minuten
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
Hallo Welt mit Micronaut
Hallo Welt mit Spring Boot
Hallo Welt mit Spring Boot!
Hallo Welt mit VS Code!
Hallo Welt mit Spring Boot
Hallo Welt mit SpringBoot / Gradle
Hallo Welt, mit Asakusa Framework!
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie PDF mit itext7 ~ HelloWorld ~
"Hallo Welt" für ImageJ mit Eclipse
Android OS (7.1.2) Build und Hello World
Hallo Welt in Java und Gradle
[Swift] Erstellen Sie ein Projekt mit Xcode (Version 12.1) und zeigen Sie "Hallo Welt!"
Hallo Welt mit Eclipse + Spring Boot + Maven
Hallo Welt mit Java Template Engine Thymeleaf
Java-Entwicklung mit Codenvy: Hello World! Run
Wie Spring Security mit Hello World funktioniert
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Minimale Java-Umgebungskonstruktion und Hello World
Versuchen Sie, "Hello, World" mit einer Kombination aus verschiedenen Sprachen und Bibliotheken zu schreiben
Hallo Welt mit JavaFX 11 (OpenJFX) von Liberica JDK 11
Hallo Welt! Mit Spring Boot (Marven + Texteditor)
Erstellen Sie eine Java-Umgebung und geben Sie Hallo Welt aus [Anfänger]
Lesen Sie "Hallo Welt"
Führen Sie JSP Hello World mit Tomcat auf Docker aus
Java, Hallo Welt!
Bis Sie Gradle installieren und "Hello World" ausgeben
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Java Hallo Welt
Hallo Welt mit Java Servlet und JSP (Einfacher Start des Webservers mit Maven + Jetty)
Zeigen Sie eine einfache Hallo Welt mit SpringBoot + IntelliJ
Versuchen Sie, Hallo Welt mit Frühling + Gradle anzuzeigen
Sie können @Param mit Kotlin 1.1 und MyBatis 3.4.1+ eliminieren! !!
Mit Rails + Docker einfach Hallo Welt anzuzeigen
Hallo Welt (REST API) mit Apache Camel + Spring Boot 2
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
So installieren Sie Gradle und Kotlin mit SDKMAN (Mac)
Hallo Welt Vergleich zwischen Spark Framework und Spring Boot
Hallo Welt (Konsolen-App) mit Apache Camel + Spring Boot 2
"Hallo Welt" in Java
Java lernen (1) -Hallo Welt
Lesen Sie System.out.println ("Hallo Welt")
Schreiben wir Hello World
Hallo Welt in Java
Java-Teil 1-Hallo Welt studieren
Hallo Welt mit Web Assembly
[Java] Eine Art von Alphabet verboten Mit Bindung Hallo, Welt! [Bindung]
Hallo Welt mit Ruby-Erweiterungsbibliothek vorerst
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Kotlin Post- und Pre-Inkrement und Operatorüberladung (Vergleich mit C, Java, C ++)
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!