[JAVA] Bonjour tout le monde avec Kotlin et Tornado FX

Bonjour tout le monde avec Kotlin et Tornado FX

introduction

JavaFX est une bibliothèque d'interface graphique qui facilite la création d'une interface graphique sympa qui s'exécute sur le bureau sur un soi-disant PC. Puisqu'il s'agit d'une bibliothèque Java, elle peut être utilisée dans un environnement où s'exécute Java SE (Java Platform, Standard Edition). Ce sera un PC exécutant un système d'exploitation tel que Linux, MacOS et Windows. De plus, comme le résultat binaire compilé (code d'octet Java), qui est une fonctionnalité des programmes Java, est commun quel que soit le système d'exploitation, les programmes créés sur un système d'exploitation peuvent être exécutés comme ils le sont sur un autre système d'exploitation.

Java en tant que langage de programmation se concentre sur les fonctionnalités de la programmation orientée objet. Récemment, nous intégrons les fonctions d'autres langages de programmation avancés, comme les fonctions de programmation fonctionnelle, mais il y a quelques points insuffisants par rapport aux fonctions des langages de programmation avancés. Cependant, Java en tant qu'environnement possède une multitude de bibliothèques standard, un grand nombre de bibliothèques et d'outils tiers, et l'écosystème Java est très puissant et surpasse celui des autres langages.

Ici, bien que le code source soit un langage de programmation différent de Java, il existe un groupe de langages de programmation appelé langage JVM qui peut être exécuté sur l'environnement d'exécution Java lorsque le résultat de la compilation devient du code d'octet Java. Les langages JVM typiques incluent de nouveaux langages tels que Scala, Groovy, Clojure et Kotlin, ainsi que des langages de programmation existants tels que JRuby et Jython exécutés sur Java.

Une multitude de bibliothèques standard Java et tierces sont disponibles à partir de ces langages JVM. Par conséquent, vous pouvez tirer parti des nombreux atouts de Java tout en effectuant une programmation avancée à l'aide du langage JVM.

Kotlin, l'un des langages JVM, est un langage de programmation qui hérite des caractéristiques de Java en tant que langage de programmation à usage général, mais qui a la capacité de programmer de manière plus concise, plus productive et plus sûre. De plus, nous mettons l'accent sur l'interopérabilité avec Java, et il est conçu pour que non seulement Java puisse être appelé depuis Kotlin mais aussi Kotlin puisse être appelé depuis Java.

Lorsque vous utilisez JavaFX de Kotlin, les fonctions uniques à Kotlin (plus concises / productives / sûres) ne peuvent pas être pleinement utilisées en accédant directement à l'API JavaFX. Par conséquent, TornadoFX, une bibliothèque qui a complètement remodelé JavaFX dans le style Kotlin, a été développée.

Cet article est le prochain article pour créer un programme appelé Hello world avec un petit mouvement comme JavaFX.

Article suivant sur la création de ce programme avec Kotlin

Dans la troisième partie qui suit, il sera créé en appelant JavaFX depuis Kotlin via TornadoFX.

Environnement de programmation Kotlin et Tornado FX

L'environnement de programmation Kotlin utilise IntelliJ IDEA Community Edition [^ 1].

[^ 1]: IntelliJ IDEA est un outil de programmation (IDE d'environnement de développement intégré) développé et vendu par JetBrains. L'édition communautaire est limitée dans ses fonctionnalités, mais est fournie gratuitement, et l'environnement de développement Kotlin est également inclus en standard avec l'édition communautaire. Il existe également un plug-in TornadeFX.

Environnement d'écriture / vérification pour cet article

article Contenu
CPU AMD PhenomⅡ 1055T (6 cœurs)
OS Version japonaise de Windows 10 64 bits
Mémoire 16GB
Graphique NVIDIA GeForce GTX 760
disque SATA SSD 500GB
JDK Oracle JDK 9.0.4
IntelliJ IDEA 2017.3.5 Community Edition
TornadoFX 1.7.14

URL de téléchargement d'IntelliJ IDEA https://www.jetbrains.com/idea/download/

IntelliJ IDEA applique un outil de localisation japonais appelé Pléiades pour le japonaisiser. Lors de la description de la procédure de fonctionnement d'IntelliJ IDEA dans cet article, nous utiliserons les noms des menus, boutons, onglets, etc. qui ont été traduits en japonais. Manuel japonais pour les produits basés sur IntelliJ

URL de téléchargement pour Oracle JDK 9.0.4 http://www.oracle.com/technetwork/java/javase/downloads/index.html

Installation du plug-in TornadoFX

Installez le plug-in Tornado FX sur IntelliJ IDEA.

image.png

image.png

TornadoFX existe dans le volet gauche, et lorsque vous le sélectionnez, les types de projets maven ou gradle sont répertoriés dans le volet droit.

Installation de Gradle

Gradle inclus dans le plug-in Gradle d'IntelliJ IDEA est la version 4.0 à compter du 15 mars 2018. Son utilisation avec JDK 9 entraînera une erreur.

Could not determine java version from '9.0.4'.

Puisque la prise en charge de JDK 9 est Gradle 4.2.1 ou version ultérieure, dans ce cas, il est préférable d'installer et d'utiliser Gradle 4.2.1 ou version ultérieure localement au lieu de l'encapsuleur Gradle.

Créer un projet MessageBoard

image.png

Il existe un répertoire généré par défaut, un fichier de configuration et un exemple de fichier source. De plus, dans la zone d'état (en bas de l'écran IntelliJ IDEA), vous serez invité à importer Gradle.

image.png

Cliquez sur l'icône de notification dans le coin inférieur droit de l'écran IntelliJ IDEA pour ouvrir le journal des événements avec le message. Immédiatement après la création d'un nouveau projet, la bibliothèque définie par la dépendance n'a pas encore été téléchargée, alors importez d'abord Gradle. Cliquez sur Importer le projet Gradle dans le message de la zone Journal des événements. Cliquez pour ouvrir l'écran "Importer des modules depuis Gradle" [^ 2].

[^ 2]: Quand j'ai fermé cet écran avec [Annuler], j'ai eu du mal à ne pas savoir où appeler cet écran la prochaine fois. Le lien dans le message du journal des événements était grisé et le lien n'était pas valide. De plus, les éléments de menu qui s'ouvrent dans le menu Affichage> Fenêtre Outils n'incluent pas Gradle. Une fois que j'ai fermé IntelliJ IDEA et l'ai redémarré, le lien dans le message du journal des événements a été activé et j'ai finalement pu rouvrir l'écran.

image.png

Cliquez sur le bouton [OK] pour démarrer le réglage.

Dans un environnement où il existe un pare-feu sur la connexion Internet, il peut être nécessaire de définir un serveur proxy, mais cet article omet l'explication [^ 3].

[^ 3]: Cet article est écrit à la maison sans serveur proxy.

Exécution du programme généré par le modèle

Le projet généré par le plug-in TornadoFX contient trois fichiers source sous forme de code de démonstration: MyApp, Styles et MainView. En construisant et en exécutant ceci, il est confirmé si l'environnement de programmation a été construit correctement.

Lorsque vous ouvrez le menu Exécuter, Exécuter, Déboguer et Exécuter avec couverture sont désactivés. Tout d'abord, vous devez configurer les paramètres de démarrage. Le moyen le plus simple consiste à cliquer avec le bouton droit sur le fichier de classe App Inheritance (MyApp dans le code de démonstration), qui est le point d'entrée pour exécuter le programme, et sélectionnez Exécuter.

En cas de succès, vous verrez l'écran suivant.

image.png

À partir de maintenant, lorsque vous ouvrez le menu Exécuter, Exécuter, Déboguer et Exécuter avec couverture sont activés. De plus, si vous sélectionnez le menu [Exécuter]> [Exécuter la configuration de lancement], [MyApp] est ajouté aux options.

Première programmation Tornado FX

La génération d'un projet TornadoFX générera du code de démonstration, mais le rejettera et créera les deux classes suivantes:

nom de la classe Contenu
MessageBoardApp Une classe qui hérite de l'application TornadoFX qui encapsule la classe d'application JavaFX
MessageBoardView Une classe qui hérite de la vue de TornadoFX qui montre un graphique de scène

Dans le code de démonstration, le package a été divisé en application et vue, mais cette fois, nous le placerons dans le même package.

MessageBoardApp.kt


package com.torutk.messageboard

import tornadofx.App

class MessageBoardApp: App(MessageBoardView::class)

MessageBoardApp hérite de la classe App de TornadoFX, qui hérite de la classe Application de JavaFX, et reçoit la classe MessageBoardView qui définit la vue (graphe de scène) comme argument du constructeur principal. Il ne comporte aucune implémentation de code du tout. Dans la classe d'héritage Application de JavaFX, j'ai écrit le code de routine qui remplace la méthode de démarrage et joue avec Stage et Scene. TornadoFX élimine le besoin d'écrire ce code de routine.

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 hérite de la classe View de TornadoFX, génère JavaFX Group en tant que nœud racine et génère du texte en tant que nœud enfant de Group pour composer le graphique de scène. Étant donné que le nœud racine est défini dans la classe View en tant que propriété, remplacez-le par un remplacement pour définir le nœud enfant. Le remplacement de la propriété racine crée et affecte une instance de la classe Group.

Le bloc init est un bloc d'initialisation. Étant donné que le constructeur principal ne peut définir que des propriétés, le code écrit dans le bloc init est exécuté lors de l'instanciation avec le constructeur principal. Vous pouvez vous référer aux propriétés du bloc init.

Dans ce bloc d'initialisation, le texte est instancié, positionné (layoutY) et ajouté au nœud racine en tant que nœud enfant. L'ajout de nœuds enfants au nœud racine utilise la surcharge d'opérateurs.

Lançons-le.

image.png

Écriture de type Tornado FX

Appliquer le modèle de générateur et définir le texte à l'intérieur du nœud racine

Des fonctions sont fournies pour générer des contrôles JavaFX. Ceux-ci prennent une expression lambda à la fin de l'argument.

Le code suivant définit une fonction de groupe de générateur qui crée un groupe au niveau du nœud racine et utilise une fonction de texte de générateur qui y crée un texte.

MessageBoardView.kt


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

De cette manière, la structure hiérarchique du graphe de scène peut être représentée par une structure imbriquée.

Animer le texte

Le message qui coule utilise TranslateTransition de JavaFX. Dans TornadoFX, la fonction d'extension move décrit une animation utilisant 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
            }
        }
    }
}

Les arguments de déplacement spécifient la durée, la destination, la méthode d'interpolation et s'il faut exécuter l'animation immédiatement. Étant donné que la source de déplacement et le nombre de répétitions n'ont pas été spécifiés dans l'argument de déplacement, ils sont spécifiés dans l'expression lambda.

Je le ferai.

run-1.gif

Spécifiez l'apparence du texte

Dans TornadoFX, l'apparence des polices et des couleurs est définie par CSS réalisé par le DSL de Kotlin, mais cette fois, il est défini par l'API JavaFX au lieu de CSS pour la commodité d'une animation fluide.

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
            }
        }
    }
}

Je le ferai.

run-2.gif

Recommended Posts

Bonjour tout le monde avec Kotlin et Tornado FX
Bonjour tout le monde avec Kotlin et JavaFX
Hello World avec GWT 2.8.2 et Maven
"Hello, World!" Avec Kotlin + CLI en 5 minutes
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Hello World avec Micronaut
Hello World avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Bonjour tout le monde avec VS Code!
Hello World avec Spring Boot
Hello World avec SpringBoot / Gradle
Bonjour tout le monde! Avec Asakusa Framework!
(Intellij) Hello World avec Spring Boot
Créez un PDF avec itext7 ~ HelloWorld ~
"Hello world" pour ImageJ avec Eclipse
Version du système d'exploitation Android (7.1.2) et Hello World
Bonjour tout le monde en Java et Gradle
[Swift] Créez un projet avec Xcode (ver 12.1) et affichez "Hello, World!"
Hello World avec Eclipse + Spring Boot + Maven
Bonjour tout le monde avec le moteur de modèle Java Thymeleaf
Développement Java avec Codenvy: Hello World! Run
Comment Spring Security fonctionne avec Hello World
(IntelliJ + gradle) Hello World avec Spring Boot
Construction d'un environnement Java minimal et Hello World
Essayez d'écrire "Hello, World" avec une combinaison de plusieurs langues et bibliothèques
Hello World avec JavaFX 11 (OpenJFX) de Liberica JDK 11
Bonjour tout le monde! Avec Spring Boot (Marven + éditeur de texte)
Créer un environnement Java et afficher hello world [Débutant]
Lire "Hello world"
Exécutez JSP Hello World avec Tomcat sur Docker
Java, bonjour le monde!
Jusqu'à ce que vous installiez Gradle et sortiez "Hello World"
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Java Hello World
Hello World avec Java Servlet et JSP (démarrage facile du serveur Web avec Maven + Jetty)
Afficher un simple Hello World avec SpringBoot + IntelliJ
Essayez d'afficher Hello World avec Spring + Gradle
Vous pouvez éliminer @Param avec Kotlin 1.1 et MyBatis 3.4.1+! !!
Facile à afficher Hello World avec Rails + Docker
Hello World (API REST) avec Apache Camel + Spring Boot 2
Je veux faire des transitions d'écran avec kotlin et java!
Comment installer Gradle et Kotlin avec SDKMAN (Mac)
Comparaison Hello World entre Spark Framework et Spring Boot
Hello World (application console) avec Apache Camel + Spring Boot 2
"Hello World" en Java
Apprendre Java (1) - Hello World
Lire System.out.println ("bonjour, monde")
Écrivons Hello World
Hello World en Java
Étudier Java-Partie 1-Hello World
Hello World avec Web Assembly
[Java] Un type d'alphabet interdit Avec reliure Bonjour tout le monde! [Reliure]
Hello World avec la bibliothèque d'extension Ruby pour le moment
Créez une application Web Hello World avec Spring Framework + Jetty
Kotlin post- et pré-incrémentation et surcharge des opérateurs (comparaison avec C, Java, C ++)
Je veux implémenter diverses fonctions avec kotlin et java!