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.
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.
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 Laden Sie in der Mitte dieses Bildes den Link "tar.gz" rechts von "macOS / x64" herunter. Ich habe 13.0.1 verwendet.
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.
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 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.
** 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)
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.
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 Wenn Sie so etwas sehen, sind Sie erfolgreich!
■ "So" 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. ** ** **
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. .. ..
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 Ich denke, dies hat die Hürden für die Entwicklung von GUI-Anwendungen gesenkt. Genießen Sie eine gute Lebensdauer der GUI-Anwendung!
Recommended Posts