Was bedeuten all die Wörter in eine JavaFX App Mean?

Mit dem JavaFX Rahmen, fügen Entwickler nützlich, optisch ansprechende Komponenten, um ihre Java-Anwendungen. JavaFX ist eine von mehreren solcher Rahmen mit dem in den Jahren 1995 und Java Swing Abstract Windowing Toolkit beginnend im Jahr 1998. Die erste Version von JavaFX bis 2008 zurückgeht, aber JavaFX wurde ein Bürger erster Klasse in der Standard-Java-Bibliothek mit dem zweiten Update Java 7 im Jahr 2011.

Auch im Jahr 2011, Oracle veröffentlicht Version 2 von JavaFX. Diese neue Version kombiniert XML-Dokumente mit Java-Code - das Aussehen einer App mit XML und die Aktionen von einer App mit Java-Code zu deklarieren. JavaFX verwendet seinen eigenen Dialekt der XML-Sprache, die so genannte FXML.

(Wenn Sie über die Ursprünge von Akronymen kümmern, XML Markup Language steht für die eXtended und JavaFX wahrscheinlich hat etwas mit Java "Sonder EFF-ECTS". Also, je nach Geschmack, FXML steht für entweder EFF-jekte eXtended Markup Language oder EFF-ECTS Markup Language. Treffen Sie Ihre Wahl.)

Dieser Artikel beschreibt einige der Namen, die Sie in einem einfachen JavaFX-Programm. (Beachten Sie, dass dieser Verweis "einige der Namen", um Mittel # 147-Namen, die ausschließlich in der Welt der JavaFX # gehören 148- - dies schließt nicht Namen wie Textfeld und Taste dass erscheinen in anderen Windowing-Umgebungen, und es umfasst nicht Namen wie java.lang und Main, die gehören Java-Technologien zu Vanille.)

Listing 1 enthält FXML Code und Listing 2 enthält Java-Code. Wenn Sie diese beiden Inserate als Teil einer einzigen Anwendung ausführen, erhalten Sie ein Programm, das die Buchstaben in Ihrem Text groß. (An dieser Stelle könnte man sarkastisch sagen: "Eine App, die Text groß? Big deal!" Eine angemessene Antwort wäre hier "eine App, die TEXT? BIG DEAL Wandelt!")

Listing 1: Der Root.fxml File

lt;? xml version = "1.0" encoding = "UTF-8"> lt;? import java.lang *> lt;.? Import javafx.scene.control *> lt;.? Import javafx.scene. Layout *> lt.?;AnchorPane prefHeight = "130.0" prefWidth = "198,0" xmlns = "https://javafx.com/javafx/8" xmlns: fx = "https://javafx.com/fxml/1"fx: Controller= "Application.Main"> lt;Kinder>fx: id = "textfield"layoutX= "25.0" layoutY= "26.0" />

Lhenden 2: Der Main.java File

Paket-Anwendung importieren javafx.application.Application-Import javafx.event.ActionEvent-Import javafx.fxml.FXML-Import javafx.fxml.FXMLLoader-Import javafx.scene.Parent-Import javafx.scene.Scene-Import javafx.scene. control.TextField-Import javafx.stage.Stage-public class Haupt erstreckt Anwendung {Public static void main (String [] args) {starten(Args) -} @ Overridepublic Leere Anfang(Stufe primaryStage) {try {Elternteil root = FXMLLoader.load(. GetClass () getResource ( "Root.fxml")) -Szene Szene = new Szene (root, 400, 400)-scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm())-primaryStage.setScene (Szene)-primaryStage.Show()-} Catch (Exception e) {e.printStackTrace () -}} @FXMLPrivate TextField- textField- @FXMLprotected void auf Knopfdruck(Action event) {textField.setText (textField.getText () toUpperCase ().) -}}

Der FXML Code

Wie jedes XML-Dokument, das Dokument in Listing 1 a Wurzelelement - ein einzelnes Element, das am Anfang des Dokuments beginnt und endet am Ende des Dokuments. In Listing 1 beginnt das Wurzelelement mit

und endet mit

Die Linien, beginnend mit lt ;? (An der Spitze der Listing 1) zählen nicht als XML-Elemente.

Die AnchorPane als Wurzelelement

Ein AnchorPane (Oder mehr formal, ein javafx.scene.layout.AnchorPane) Ist ein Ort, wo die Dinge verankert werden kann. Denken Sie versuchen, auf einem großen, leeren Raum eine Schaltfläche oder ein Textfeld zu setzen. Ohne ein AnchorPane, diese Komponenten schweben nolens volens in den Raum. Mit einem AnchorPane, Sie können machen die genau 25,0 Pixel vom linken Rand der linken Kante des Textfelds sein AnchorPane. (Siehe Textfeld Elements layoutX Attribut in Listing 1) Auch mit ein AnchorPane, Sie können den oberen Rand des Textfelds genau 26,0 Pixel vom oberen Rand der sein machen die AnchorPane. (Siehe Textfeld Elements layoutY Attribut in Listing 1) Das gleiche gilt für einen Button oder für jede andere Komponente, die Sie in der Anlage wahr AnchorPane.

Innerhalb eines Root-Elements FXML Dokument, ein fx: Controller Attribut sagt Java den Namen des Regler Klasse - die Klasse, deren Code führt Aktionen mit der App verbunden. In Listing 1, den Namen des Controller-Klasse ist application.Main. Und was für ein Zufall! Die Klasse in Listing 2 ist benannt Main, und es ist in einem Paket mit dem Namen Anwendung!

Wenn Sie der FXML Code als Umriss denke, es hat mit Hierher eine Überschrift, und mit Unterpositionen der Unterpositionen, und so weiter. In Listing 1, primäre Überschrift ist AnchorPane. Die einzige Stelle von AnchorPane ist Kinder. Aber Kinder nämlich zwei Unterpositionen seiner Eigen-, Textfeld und Taste.

Die fx: id-Attribut

Das Textfeld Element eine fx: id Attribut. Dieses Attribut gibt an, wie diese Komponente innerhalb einiger Java-Code zu finden. Mit anderen Worten,

sagt: "dieses Widget innerhalb der zu verweisen application.Main Java-Code, verwenden Sie den Namen Textfeld."(Wenn Sie mehr Einzelheiten wollen, spähen voraus auf die Diskussion über den Code in Listing 2)

Sie müssen nicht ein beschreibendes Wort verwenden, um eine Komponente zu identifizieren. Du kannst schreiben

Solange Sie das Wort woofinflang konsequent (von dem Wort bezieht woofinflang in Java-Code) wird alles glatt gehen. Natürlich Namen wie Textfeld, TextField2 und phoneNumberField sind informativer als Namen wie woofinflang. So bleiben Sie weg von woofinflangs, wenn Sie können.

Das mnemonicParsing Attribut

In Listing 1, innerhalb der Taste Element, das mnemonicParsing Attribut hat den Wert falsch. Dies falsch Wert teilt Java nicht eine Tastenkombination für die Schaltfläche zu stören Einstellung. Wenn der Wert waren wahr, Sie können einen Unterstrich auf den Wert der Schaltfläche hinzufügen Text Attribut:

text = "_ Capitalize"

Dann würde der Benutzer nicht mit der Maus über die Schaltfläche bewegen. Da der Unterstrich kommt unmittelbar vor dem Schreiben C, Alt + C drücken würde die gleiche Wirkung wie die Schaltfläche klicken.

Das onAction Attribut

Eine Schaltfläche onAction Attribut sagt Java den Namen der Methode auszuführen, wenn der Benutzer auf die Schaltfläche klickt. In Listing 1, die onAction Attributwert ist #auf Knopfdruck. Dies teilt Java der Controller Klasse aufrufen auf Knopfdruck Verfahren, wenn der Benutzer auf die Schaltfläche klickt. Glücklicherweise ist die application.Main Klasse in Listing 2 hat eine auf Knopfdruck Verfahren.

In Listing 1, die onAction Wert ist #auf Knopfdruck. Aber in Listing 2 ist die entsprechende Methodennamen auf Knopfdruck ohne die Hash-Symbol. In einer Schaltfläche onAction Attribut, das Hash-Symbol (#) Ist Teil der Methodennamen nicht. Aber das bedeutet nicht, dass Sie den Hash-Symbol in Ihrem FXML Dokument weglassen. Wenn Sie das Hash-Symbol dann weglassen, wenn Sie versuchen, das Programm zu starten, erhalten Sie eine hässliche Fehlermeldung angezeigt.

Der Java-Code

Die Klasse in Listing 2 erstreckt sich die Anwendung Klasse. Ein Anwendung genau das, was Sie denken, es ist -. ein Haufen von Code, der ein Benutzer ein Programm mit einem klar genannten Zweck wie und geht daher kann "Erstellen Sie ein Dokument", "Surfen im Internet" oder "einen Partner finden"

Laufen und den Start

Es gibt mindestens zwei Möglichkeiten, eine JavaFX Programm auszuführen. Eine Möglichkeit ist es, als eine gewöhnliche Java-Anwendung auszuführen. Zum Beispiel in Eclipse, wählen Sie Run As-> Java-Anwendung.

Wenn Sie dies tun, startet der Computer die Java Virtual Machine, die wiederum die das Programm ruft Main Verfahren. In Listing 2, die Main Methode führt nur eine Anweisung - einen Aufruf an die starten Verfahren. der Aufruf der starten Methode setzt die JavaFX App Räder in Bewegung auszuführen.

Alternativ können Sie vorverpackten JavaFX Code ausführen. Ein vorverpackte Paket enthält alles, was ein Computer benötigt, um eine Anwendung auszuführen. Dieses "alles" enthält Code für eine virtuelle Java-Maschine auf dem Computer des Benutzers zu überprüfen und Code eine Java Virtual Machine herunterzuladen, wenn der Computer nicht bereits eine haben. Wenn Sie eine JavaFX-Anwendung auf diese Weise FPV, Ihr Programm muss nicht ein Main Verfahren. Das System ruft das im Programm starten automatisch Verfahren.

EIN .Glas Datei ist wie ein .Reißverschluss Datei, mit der Ausnahme, dass jeder .Glas Datei enthält bestimmte Elemente spezifisch für Java-Programme. Eines der Dinge, die Sie in ein setzen können .Glas Datei ist eine Vorverpackung JavaFX-Anwendung.

Wenn Sie den Anruf starten Methode, Java reagiert, indem sie Anrufe zu Ihrer Anwendung zu machen drin und Anfang Methoden. Sie sehen nicht ein drin Methode in Listing 2, weil Ihre Main Klasse erbt die Anwendung Klasse Standard drin Verfahren. (Das ist in Ordnung, weil der Standard drin Verfahren nichts zu tun.)

Dinge in andere Dinge

Das Anfang Verfahren in Listing 2 erzeugt ein Elternteil. Das Elternteil ist der Ausgangspunkt einer Szene, und das Szene erscheint ein Stufe. Hier ist ein bisschen mehr Detail:

  • EIN Stufe ist das, was man normalerweise einen nennen würde "Fenster".

    Es ist ein rechteckiger Arbeitsbereich auf dem Bildschirm des Benutzers.

  • EIN Szene (Auch als ein bekannter Szenengraph) Ist ein Baum von Komponenten.

    Zum Beispiel kann ein Szene enthält unter Umständen zwei Scheiben. Der linke Bereich enthält zwei kleinere Scheiben - eine obere Bereich und einen unteren Bereich. Der obere Bereich enthält eine Knopf- das untere Fenster ein Textfeld enthält. Die rechte Scheibe könnte ein Bild und eine Bezeichnung für das Bild enthalten.

    Bei dieser Anwendung des Artikels, ist der Baum der Komponenten ziemlich einfach. Das Szene enthält ein AnchorPane was wiederum enthält ein Textfeld und Taste. (Siehe Listing 1)

  • EIN Elternteil ist der Ausgangspunkt für eine Szene.

    Trotz allem, was in den vorherigen Punkt erscheint, ein Szene kann nicht sein Leben beginnen zwei Scheiben, indem er oder durch zwei von etwas haben. Jeden Szene eine einzelne Komponente beginnt mit, und diese Komponente vom Typ sein muss Elternteil. So in dieser Anwendung des Artikels, die Szene enthält ein Elternteil, welche enthält ein AnchorPane, welche enthält ein Textfeld und Taste.

Das Anfang Verfahren in Listing 2 verbindet ein Elternteil zu den Komponenten in Listing 1 beschrieben, ordnet ein Szene mit dem Elternteil, und ordnet dann ein Stufe mit dem Szene. Schließlich zeigt der Code der Stufe mit einem Aufruf der Stufe Klasse Show Verfahren.

Wenn Sie mit Web-Design vertraut sind, können Sie Cascading Style Sheets (CSS) verwenden das Aussehen einer Szene zu beschreiben. In Listing 2, der Anruf an (Scene.getStyleSheets). Hinzufügen ordnet ein Stylesheet mit der Szene. Wenn dein .css Datei leer ist (wie es in diesem Artikel, dem Beispiel), dann ruft (Scene.getStyleSheets). Hinzufügen hat keine Auswirkung.

Handeln

In Listing 1 ist die Linie

gibt Ihnen einen Weg, um eine der Komponenten auf dem Bildschirm des Benutzers zu verweisen. So in Listing 2, die Linie

Private TextField- textField-

macht diese Textfeld Komponente ein Objekt in Ihrem Java-Code sein.

Wieder in Listing 1, ist der Knopf onAction Attribut sagt Java der Controller Klasse aufrufen auf Knopfdruck Verfahren, wenn der Benutzer auf die Schaltfläche klickt. So in Listing 2, die auf Knopfdruck Methode fummelt mit dem Text in der Textfeld Komponente. (Genauer gesagt, die auf Knopfdruck Methode ruft den Text in der Textfeld, kapitalisiert den Text, und legt dann den aktivierten Text in den Rücken Textfeld.Dies ist), wie das Programm weiß, was zu tun ist, wenn der Benutzer auf die Schaltfläche klickt.

Sie müssen also nicht immer verwenden wie Textfeld. Sie können etwas nennen bershmlug solange Sie den Namen konsequent nutzen. In der FXML Datei, die Sie schreiben

und in der Java-Code, den Sie schreiben

@FXMLprivate TextField- bershmlug-@FXMLprotected Leere onclick (Action event) {bershmlug.setText (bershmlug.getText () toUpperCase ()) -.}

Das @FXML Anmerkungen in Listing 2 sind für die Zutrittskontrolle. Wenn Sie eine JavaFX-Programm ausführen, ein Ladeprogramm packt Ihr FXML Code und wandelt sie in Java-Code. (Es "Lasten" der FXML Code in Ihrem Programm.) Um seine Arbeit zu tun, muss der Lader Namen zugreifen wie Textfeld und auf Knopfdruck in Listing 2. Aber denken Sie daran: Dieser Lader nicht Teil des eigenen Programms. Der Loader gehört zur Java-Standardbibliotheken.

Wie können Sie den Zugriff auf die Namen steuern Textfeld und auf Knopfdruck? Java gewöhnlichen Zugriffsmodifikatoren (Öffentlichkeit, geschützt, Privat- und Standard) lassen Sie kaum eine andere Wahl. Mit diesen Modifikatoren, ist der einzige Weg, den Zugriff von einem externen Programm zu ermöglichen, zu erklären Textfeld und auf Knopfdruck sein Öffentlichkeit. Aber für viele Entwickler, die unterschiedslose Anwendung von Öffentlichkeit Zugang gilt als linkisch. Mit Öffentlichkeit Zugriff, jeden Klasse hat Zugriff auf Textfeld und auf Knopfdruck. Das ist nicht wirklich das, was ein JavaFX Entwickler möchte.

Zur Lösung dieses Problems, die @FXML Anmerkung bietet eine besondere Art von Zugang. In Listing 2, die Textfeld variabel ist Privat- so, gewöhnlich, keine anderen Klasse als Main Zugriff auf die Textfeld Variable. Aber die @FXML Anmerkung gewährt besonderes Privileg für den Lader. Im Gegensatz zu anderen Codes kann der Lader Code verweisen die Textfeld Variable. Wenn Sie Ihr Programm kompilieren und ausführen, sieht Java die @FXML Annotation und macht spezielle Tricks Zugang zum Lader zur Verfügung zu stellen.

Die gleiche Art der Sache gilt für die auf Knopfdruck Verfahren. Ohne das @FXML Anmerkung, die geschützt onclick Verfahren konnte nur von Klassen in Ihrem eigenen aufgerufen werden Anwendung Paket und von Subklassen Ihrer Main Klasse. Der Lader ist keines dieser Dinge. So besonderen Zugang vom Lader zu gewähren, Ihre auf Knopfdruck Methode Sie Ihre Vorwort auf Knopfdruck Methodendeklaration mit @FXML.

Menü