JavaFX - Kurzanleitung
Rich Internet Applicationssind solche Webanwendungen, die ähnliche Funktionen und Erfahrungen bieten wie Desktopanwendungen. Sie bieten den Benutzern im Vergleich zu normalen Webanwendungen ein besseres visuelles Erlebnis. Diese Anwendungen werden als Browser-Plug-Ins oder als virtuelle Maschine geliefert und dienen dazu, herkömmliche statische Anwendungen in erweiterte, flüssigere, animierte und ansprechende Anwendungen umzuwandeln.
Im Gegensatz zu herkömmlichen Desktop-Anwendungen benötigen RIAs keine zusätzliche Software, um ausgeführt zu werden. Alternativ sollten Sie je nach Anwendung Software wie ActiveX, Java, Flash installieren.
In einer RIA wird die grafische Darstellung auf der Clientseite verwaltet, da sie über ein Plugin verfügt, das umfangreiche Grafiken unterstützt. Kurz gesagt, die Datenmanipulation in einer RIA wird auf der Serverseite ausgeführt, während die entsprechende Objektmanipulation auf der Clientseite durchgeführt wird.
Wir haben drei Haupttechnologien, mit denen wir eine RIA entwickeln können. Dazu gehören die folgenden -
- Adobe Flash
- Microsoft Silverlight
- JavaFX
Adobe Flash
Diese Softwareplattform wurde von Adobe Systems entwickelt und wird zum Erstellen von Rich Internet-Anwendungen verwendet. Zusammen mit diesen können Sie auch andere Anwendungen wie Vektor, Animation, Browsergames, Desktop-Anwendungen, mobile Anwendungen und Spiele usw. erstellen.
Dies ist die am häufigsten verwendete Plattform für die Entwicklung und Ausführung von RIAs mit einer Penetrationsrate für Desktop-Browser von 96%.
Microsoft Silverlight
Genau wie Adobe Flash ist Microsoft Silverlight auch ein Softwareanwendungsframework für die Entwicklung und Ausführung von Rich Internet-Anwendungen. Ursprünglich wurde dieses Framework für Streaming-Medien verwendet. Die vorliegenden Versionen unterstützen auch Multimedia, Grafiken und Animationen.
Diese Plattform wird selten mit einer Penetrationsrate des Desktop-Browsers von 66% verwendet.
JavaFX
JavaFX ist eine Java-Bibliothek, mit der Sie Rich Internet-Anwendungen entwickeln können. Durch die Verwendung der Java-Technologie haben diese Anwendungen eine Browser-Penetrationsrate von 76%.
Was ist JavaFX?
JavaFX ist eine Java-Bibliothek zum Erstellen von Rich Internet-Anwendungen. Die mit dieser Bibliothek geschriebenen Anwendungen können konsistent auf mehreren Plattformen ausgeführt werden. Die mit JavaFX entwickelten Anwendungen können auf verschiedenen Geräten wie Desktop-Computern, Mobiltelefonen, Fernsehgeräten, Tablets usw. ausgeführt werden.
Entwickeln GUI Applications Mit der Programmiersprache Java verlassen sich die Programmierer auf Bibliotheken wie Advanced Windowing Toolkit und Swing. Nach dem Aufkommen von JavaFX können diese Java-Programmierer nun GUI-Anwendungen mit umfangreichen Inhalten effektiv entwickeln.
Benötigen Sie JavaFX
Entwickeln Client Side ApplicationsMit umfangreichen Funktionen waren die Programmierer auf verschiedene Bibliotheken angewiesen, um Funktionen wie Medien, Benutzeroberflächensteuerelemente, Web, 2D und 3D usw. hinzuzufügen. JavaFX enthält alle diese Funktionen in einer einzigen Bibliothek. Darüber hinaus können die Entwickler auf die vorhandenen Funktionen einer Java-Bibliothek zugreifen, zSwing.
JavaFX bietet eine Vielzahl von Grafik- und Medien-APIs und nutzt die Moderne Graphical Processing Unitdurch hardwarebeschleunigte Grafik. JavaFX bietet auch Schnittstellen, über die Entwickler Grafikanimationen und UI-Steuerung kombinieren können.
Man kann JavaFX mit JVM-basierten Technologien wie Java, Groovy und JRuby verwenden. Wenn Entwickler sich für JavaFX entscheiden, müssen keine zusätzlichen Technologien erlernt werden, da Vorkenntnisse in einer der oben genannten Technologien ausreichen, um RIAs mit JavaFX zu entwickeln.
Funktionen von JavaFX
Im Folgenden sind einige wichtige Funktionen von JavaFX aufgeführt:
Written in Java - Die JavaFX-Bibliothek ist in Java geschrieben und steht für die Sprachen zur Verfügung, die auf einer JVM ausgeführt werden können. Dazu gehören: Java, Groovy and JRuby. Diese JavaFX-Anwendungen sind auch plattformunabhängig.
FXML- JavaFX bietet eine Sprache namens FXML, eine HTML-ähnliche deklarative Auszeichnungssprache. Der einzige Zweck dieser Sprache ist die Definition einer Benutzeroberfläche.
Scene Builder- JavaFX bietet eine Anwendung namens Scene Builder. Durch die Integration dieser Anwendung in IDEs wie Eclipse und NetBeans können die Benutzer auf eine Drag & Drop-Entwurfsoberfläche zugreifen, über die FXML-Anwendungen entwickelt werden (genau wie Swing Drag & Drop- und DreamWeaver-Anwendungen).
Swing Interoperability - In einer JavaFX-Anwendung können Sie Swing-Inhalte mithilfe von einbetten Swing NodeKlasse. Ebenso können Sie die vorhandenen Swing-Anwendungen mit JavaFX-Funktionen wie eingebetteten Webinhalten und umfangreichen Grafikmedien aktualisieren.
Built-in UI controls - Die JavaFX-Bibliothek bietet UI-Steuerelemente, mit denen wir eine Anwendung mit vollem Funktionsumfang entwickeln können.
CSS like Styling- JavaFX bietet ein CSS-ähnliches Styling. Auf diese Weise können Sie das Design Ihrer Anwendung mit einfachen CSS-Kenntnissen verbessern.
Canvas and Printing API- JavaFX bietet Canvas, einen Sofortmodus für die Rendering-API. Innerhalb des Paketsjavafx.scene.canvasEs enthält eine Reihe von Klassen für Canvas, mit denen wir direkt in einem Bereich der JavaFX-Szene zeichnen können. JavaFX bietet im Paket auch Klassen für Druckzweckejavafx.print.
Rich set of API’s- Die JavaFX-Bibliothek bietet eine Vielzahl von APIs zum Entwickeln von GUI-Anwendungen, 2D- und 3D-Grafiken usw. Diese APIs enthalten auch Funktionen der Java-Plattform. Daher können Sie mit dieser API auf die Funktionen von Java-Sprachen wie Generics, Annotations, Multithreading und Lambda Expressions zugreifen. Die traditionelle Java-Sammlungsbibliothek wurde erweitert und Konzepte wie beobachtbare Listen und Karten wurden hinzugefügt. Mit diesen können die Benutzer die Änderungen in den Datenmodellen beobachten.
Integrated Graphics library - JavaFX bietet Klassen für 2d und 3d Grafik.
Graphics pipeline- JavaFX unterstützt Grafiken, die auf der hardwarebeschleunigten Grafikpipeline Prism basieren. Bei Verwendung mit einer unterstützten Grafikkarte oder GPU bietet es flüssige Grafiken. Falls das System keine Grafikkarte unterstützt, wird standardmäßig das Software-Rendering-Stack verwendet.
Geschichte von JavaFX
JavaFX wurde ursprünglich von entwickelt Chris Oliver, als er für eine Firma namens arbeitete See Beyond Technology Corporation, die später von erworben wurde Sun Microsystems im Jahr 2005.
Die folgenden Punkte geben uns weitere Informationen zu diesem Projekt -
Ursprünglich wurde dieses Projekt als F3 bezeichnet (Form Follows Functions) und es wurde mit der Absicht entwickelt, umfangreichere Schnittstellen für die Entwicklung von GUI-Anwendungen bereitzustellen.
Sun Microsystems erwarb das Unternehmen See Beyond im Juni 2005 und passte das F3-Projekt als an JavaFX.
Im Jahr 2007 wurde JavaFX offiziell bei angekündigt Java One, eine World Wide Web-Konferenz, die jährlich stattfindet.
Im Jahr 2008 Net Beansintegriert in JavaFX war verfügbar. Im selben Jahr die JavaStandard Development Kit für JavaFX 1.0 wurde veröffentlicht.
Im Jahr 2009 erwarb die Oracle Corporation Sun Microsystems und im selben Jahr wurde auch die nächste Version von JavaFX (1.2) veröffentlicht.
Im Jahr 2010 kam JavaFX 1.3 heraus und im Jahr 2011 wurde JavaFX 2.0 veröffentlicht.
Die neueste Version, JavaFX8, wurde am 18. März 2014 als integraler Bestandteil von Java veröffentlicht.
Ab Java8 das JDK (Java Development Kit) beinhaltet JavaFXBibliothek darin. Um JavaFX-Anwendungen auszuführen, müssen Sie daher lediglich Java8 oder eine höhere Version auf Ihrem System installieren.
Darüber hinaus unterstützen IDEs wie Eclipse und NetBeans JavaFX. In diesem Kapitel erfahren Sie, wie Sie die Umgebung so einstellen, dass JavaFX-Anwendungen auf verschiedene Arten ausgeführt werden.
Java8 installieren
Zunächst müssen Sie überprüfen, ob Java auf Ihrem System installiert ist oder nicht, indem Sie die Eingabeaufforderung öffnen und den Befehl „Java“ eingeben.
Wenn Sie Java nicht auf Ihrem System installiert haben, wird an der Eingabeaufforderung die im folgenden Screenshot gezeigte Meldung angezeigt.
Installieren Sie anschließend Java, indem Sie die folgenden Schritte ausführen.
Step 1- Besuchen Sie die JavaSE-Downloadseite und klicken Sie auf das JDKDownload Schaltfläche wie im folgenden Screenshot hervorgehoben
Step 2 - Wenn Sie auf die Schaltfläche Herunterladen klicken, werden Sie zu weitergeleitet Java SE Development Kit 8 DownloadsSeite. Diese Seite enthält Links zu JDK für verschiedene Plattformen.
Akzeptieren Sie die Lizenzvereinbarung und laden Sie die erforderliche Software herunter, indem Sie auf den entsprechenden Link klicken.
Wenn Sie beispielsweise mit einem Windows 64-Bit-Betriebssystem arbeiten, müssen Sie die im folgenden Screenshot hervorgehobene JDK-Version herunterladen.
Wenn Sie auf den hervorgehobenen Link klicken, wird das für Windows 64-Bit-Betriebssystem geeignete Java8 Development Kit auf Ihr System heruntergeladen.
Step 3 - Führen Sie die heruntergeladene ausführbare Binärdatei aus, um die Installation von JDK8 zu starten.
Step 4 - Wählen Sie das Installationsverzeichnis.
Step 5 - Wenn Sie den Zielordner auswählen und auf Weiter klicken, zeigt der JavaFX-Installationsprozess den Fortschrittsbalken an, wie im folgenden Screenshot gezeigt.
Step 6 - Ändern Sie bei Bedarf das Installationsverzeichnis, behalten Sie die Standardverzeichnisse bei und fahren Sie fort.
Step 7 - Beenden Sie den Installationsvorgang, indem Sie auf die Schaltfläche Schließen klicken (siehe folgenden Screenshot).
Einrichten des Pfads für Windows
Nach der Installation von Java müssen Sie die Pfadvariablen festlegen. Angenommen, Sie haben Java installiertC:\Program Files\java\jdk1.8.0_91Verzeichnis.
Jetzt können Sie die folgenden Schritte ausführen -
Klicken Sie mit der rechten Maustaste auf "Arbeitsplatz" und wählen Sie "Eigenschaften".
Klicken Sie auf der Registerkarte "Erweitert" auf die Schaltfläche "Umgebungsvariablen".
Ändern Sie nun die Variable 'Path' so, dass sie auch den Pfad zur ausführbaren Java-Datei enthält. Wenn der Pfad derzeit beispielsweise auf "C: \ WINDOWS \ SYSTEM32" festgelegt ist, ändern Sie Ihren Pfad in "C: \ WINDOWS \ SYSTEM32". C: \ Programme \ java \ jdk1.8.0_91 \ bin '.
Festlegen der NetBeans-Umgebung von JavaFX
NetBeans8bietet integrierte Unterstützung für JavaFX. Bei der Installation können Sie eine JavaFX-Anwendung ohne zusätzliche Plugins oder JAR-Dateien erstellen. Um die NetBeans-Umgebung einzurichten, müssen Sie die folgenden Schritte ausführen.
Step 1- Besuchen Sie die NetBeans-Website NetBeans-Website und klicken Sie auf die Schaltfläche Herunterladen, um die NetBeans-Software herunterzuladen.
Step 2 - Beim Klicken DownloadSie gelangen auf die Download-Seite der NetBeans-Software, die NetBeans-Bundles für verschiedene Java-Anwendungen bereitstellt. Laden Sie die NetBeans-Software für herunterJavaSE wie im folgenden Screenshot gezeigt.
Step 3 - Beim Klicken auf diese Schaltfläche wird eine Datei mit dem Namen netbeans-8.0-windows.exe wird auf Ihr System heruntergeladen. Führen Sie diese Datei aus, um sie zu installieren. Beim Ausführen dieser Datei wird ein NetBeans-Installationsprogramm gestartet, wie im folgenden Screenshot gezeigt.
Nach Abschluss der Konfiguration sehen Sie die Welcome Page of the installer.
Step 4 - Klicken Sie auf die Schaltfläche Weiter und fahren Sie mit der Installation fort.
Step 5 - Das nächste Fenster enthält die NETBEANS IDE 8.0 license agreement. Lesen Sie es sorgfältig durch und akzeptieren Sie die Vereinbarung, indem Sie das Kontrollkästchen unter "Ich akzeptiere die Bedingungen in der Lizenzvereinbarung" aktivieren und dann auf klickenNext Taste.
Step 6 - Im nächsten Fenster sehen Sie die Lizenzvereinbarung für JunitAkzeptieren Sie dies, indem Sie das Optionsfeld unter "Ich akzeptiere die Bedingungen in der Lizenzvereinbarung, JUnit installieren" aktivieren und auf klicken Next.
Step 7- Wählen Sie das Zielverzeichnis, in dem Netbeans 8.0 installiert werden soll. Darüber hinaus können Sie auch das Verzeichnis durchsuchen, in demJava Development Kit ist in Ihrem System installiert und klicken Sie auf Next Taste.
Step 8 - Wählen Sie ebenfalls das Zielverzeichnis für Glassfish ServerInstallation. Durchsuchen Sie das Java Development Kit-Verzeichnis (jetzt für Glassfish Reference) und klicken Sie dann aufNext.
Step 9 - Überprüfen Sie die Check for Updates Klicken Sie auf die Schaltfläche Installieren, um die Installation zu starten.
Step 10 - Dieser Schritt startet die Installation von NetBeans IDE 8.0 und kann eine Weile dauern.
Step 11 - Klicken Sie nach Abschluss des Vorgangs auf Finish Schaltfläche, um die Installation abzuschließen.
Step 12 - Sobald Sie die NetBeans-IDE gestartet haben, wird die Startseite angezeigt, wie im folgenden Screenshot gezeigt.
Step 13 - Wählen Sie im Dateimenü New Project… Um den Assistenten für neue Projekte zu öffnen, wie im folgenden Screenshot gezeigt.
Step 14 - In der New Project Assistent auswählen JavaFX und klicken Sie auf Next. Es wird eine neue JavaFX-Anwendung für Sie erstellt.
Step 15 - Wählen Sie den Namen des Projekts und den Ort des Projekts in der NewJavaFX Application Fenster und dann klicken Finish. Es wird eine Beispielanwendung mit dem angegebenen Namen erstellt.
In diesem Fall eine Anwendung mit einem Namen javafxsamplegeschaffen. In dieser Anwendung generiert die NetBeans-IDE ein Java-Programm mit dem NamenJavafxsample.java. Wie im folgenden Screenshot gezeigt, wird dieses Programm in NetBeans-Quellpaketen erstellt→ javafxsample.
Step 16 - Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie Run File um diesen Code wie im folgenden Screenshot gezeigt auszuführen.
Dieses automatisch erstellte Programm enthält den Code, der ein einfaches JavaFX-Fenster mit einer Schaltfläche mit der Bezeichnung generiert Say ‘Hello World’drin. Jedes Mal, wenn Sie auf diese Schaltfläche klicken, wird die Zeichenfolge angezeigtHello World wird wie unten gezeigt auf der Konsole angezeigt.
JavaFX in Eclipse installieren
Ein Plugin namens e(fx)clipse ist auch in JavaFX verfügbar. Mit den folgenden Schritten können Sie JavaFX in Eclipse festlegen. Stellen Sie zunächst sicher, dass Sie Eclipse in Ihrem System haben. Wenn nicht, laden Sie Eclipse herunter und installieren Sie es auf Ihrem System.
Führen Sie nach der Installation von Eclipse die folgenden Schritte aus, um die Installation durchzuführen e(fx)clipse in Ihrem System.
Step 1 - Öffnen Sie Eclipse in der Help Menü und wählen Install New Software… Option wie unten gezeigt.
Beim Klicken wird das angezeigt Available Software Fenster, wie im folgenden Screenshot gezeigt.
Im Textfeld Work with In diesem Fenster müssen Sie den Link des Plugins für die erforderliche Software angeben.
Step 2 - Klicken Sie auf Add… Taste. Geben Sie den Namen des Plugins als ane(fx)clipse. Geben Sie als Nächstes den folgenden Link als Speicherort an.http://download.eclipse.org/efxclipse/updates-released/2.3.0/site/
Step 3 - Nachdem Sie den Namen und den Speicherort des Plugins angegeben haben, klicken Sie auf die Schaltfläche OK, wie im folgenden Screenshot hervorgehoben.
Step 4 - Kurz nachdem Sie das Plugin hinzugefügt haben, finden Sie zwei Kontrollkästchen für e(fx)clipse – install und e(fx)clipse – single components. Aktivieren Sie diese beiden Kontrollkästchen und klicken Sie aufAdd… Schaltfläche wie im folgenden Screenshot gezeigt.
Step 5- Öffnen Sie als Nächstes Ihre Eclipse-IDE. Klicken Sie auf das Menü Datei und wählen Sie Projekt, wie im folgenden Screenshot gezeigt.
Step 6- Anschließend wird ein Fenster angezeigt, in dem Sie eine Liste der von Eclipse bereitgestellten Assistenten zum Erstellen eines Projekts anzeigen können. Erweitern Sie dieJavaFX Assistent auswählen JavaFX Project und klicken Sie auf Next Schaltfläche wie im folgenden Screenshot gezeigt.
Step 7 - Beim Klicken Nextwird ein Assistent für neue Projekte geöffnet. Hier können Sie den gewünschten Projektnamen eingeben und auf klickenFinish.
Step 8- Wenn Sie auf Fertig stellen klicken, wird eine Anwendung mit dem angegebenen Namen (Beispiel) erstellt. Im Unterpaket namensapplication, ein Programm mit dem Namen Main.java wird wie unten gezeigt generiert.
Step 9- Dieses automatisch generierte Programm enthält den Code zum Generieren eines leeren JavaFX-Fensters. Klicken Sie mit der rechten Maustaste auf diese Datei und wählen SieRun As → Java Application wie im folgenden Screenshot gezeigt.
Beim Ausführen dieser Anwendung wird ein leeres JavaFX-Fenster angezeigt (siehe unten).
Note - Wir werden in den späteren Kapiteln mehr über den Code diskutieren.
JavaFX bietet eine vollständige API mit einer Vielzahl von Klassen und Schnittstellen zum Erstellen von GUI-Anwendungen mit umfangreichen Grafiken. Die wichtigen Pakete dieser API sind -
javafx.animation - Enthält Klassen zum Hinzufügen von übergangsbasierten Animationen wie Füllen, Überblenden, Drehen, Skalieren und Übersetzen zu den JavaFX-Knoten.
javafx.application - Enthält eine Reihe von Klassen, die für den Lebenszyklus der JavaFX-Anwendung verantwortlich sind.
javafx.css - Enthält Klassen zum Hinzufügen von CSS-ähnlichem Stil zu JavaFX-GUI-Anwendungen.
javafx.event - Enthält Klassen und Schnittstellen zur Bereitstellung und Verarbeitung von JavaFX-Ereignissen.
javafx.geometry - Enthält Klassen zum Definieren von 2D-Objekten und zum Ausführen von Operationen an diesen.
javafx.stage - Dieses Paket enthält die Containerklassen der obersten Ebene für JavaFX-Anwendungen.
javafx.scene- Dieses Paket enthält Klassen und Schnittstellen zur Unterstützung des Szenendiagramms. Darüber hinaus bietet es Unterpakete wie Canvas, Diagramm, Steuerung, Effekt, Bild, Eingabe, Layout, Medien, Farbe, Form, Text, Transformation, Web usw. Es gibt mehrere Komponenten, die diese umfangreiche API von JavaFX unterstützen .
Die folgende Abbildung zeigt die Architektur der JavaFX-API. Hier sehen Sie die Komponenten, die die JavaFX-API unterstützen.
Szenendiagramm
In JavaFX wurden die GUI-Anwendungen mithilfe eines Szenendiagramms codiert. Ein Szenendiagramm ist der Ausgangspunkt für die Erstellung der GUI-Anwendung. Es enthält die (GUI-) Anwendungsprimitive, die als Knoten bezeichnet werden.
Ein Knoten ist ein visuelles / grafisches Objekt und kann Folgendes enthalten:
Geometrical (Graphical) objects - (2D und 3D) wie Kreis, Rechteck, Polygon usw.
UI controls - wie Schaltfläche, Kontrollkästchen, Auswahlfeld, Textbereich usw.
Containers - (Layoutfenster) wie Randfenster, Gitterfenster, Durchflussfenster usw.
Media elements - wie Audio-, Video- und Bildobjekte.
Im Allgemeinen erstellt eine Sammlung von Knoten ein Szenendiagramm. Alle diese Knoten sind in einer hierarchischen Reihenfolge angeordnet, wie unten gezeigt.
Jeder Knoten im Szenendiagramm hat ein einzelnes übergeordnetes Element, und der Knoten, der keine übergeordneten Elemente enthält, wird als Knoten bezeichnet root node.
Auf die gleiche Weise hat jeder Knoten ein oder mehrere untergeordnete Knoten, und der Knoten ohne untergeordnete Knoten wird als bezeichnet leaf node;; Ein Knoten mit untergeordneten Knoten wird als bezeichnetbranch node.
Eine Knoteninstanz kann nur einmal zu einem Szenendiagramm hinzugefügt werden. Die Knoten eines Szenendiagramms können Effekte, Deckkraft, Transformationen, Ereignishandler, Ereignishandler und anwendungsspezifische Zustände aufweisen.
Prisma
Prisma ist ein high performance hardware–accelerated graphical pipelineDas wird verwendet, um die Grafiken in JavaFX zu rendern. Es kann sowohl 2D- als auch 3D-Grafiken rendern.
Zum Rendern von Grafiken verwendet ein Prisma -
- DirectX 9 unter Windows XP und Vista.
- DirectX 11 unter Windows 7.
- OpenGL unter Mac und Linux, Embedded Systems.
Falls die Hardwareunterstützung für Grafiken auf dem System nicht ausreicht, verwendet Prism den Software-Renderpfad, um die Grafiken zu verarbeiten.
Bei Verwendung mit einer unterstützten Grafikkarte oder GPU bietet es flüssigere Grafiken. Nur für den Fall, dass das System keine Grafikkarte unterstützt, verwendet Prism standardmäßig den Software-Rendering-Stack (einer der beiden oben genannten).
GWT (Glass Windowing Toolkit)
Wie der Name schon sagt, bietet GWT Dienste zum Verwalten von Windows, Timern, Oberflächen und Ereigniswarteschlangen. GWT verbindet die JavaFX-Plattform mit dem nativen Betriebssystem.
Quantum Toolkit
Es ist eine Abstraktion über die untergeordneten Komponenten von Prism, Glass, Media Engine und Web Engine. Es verbindet Prism und GWT miteinander und stellt sie JavaFX zur Verfügung.
WebView
Mit JavaFX können Sie auch HTML-Inhalte in ein Szenendiagramm einbetten. WebView ist die Komponente von JavaFX, mit der dieser Inhalt verarbeitet wird. Es verwendet eine Technologie namensWeb KitDies ist eine interne Open-Source-Webbrowser-Engine. Diese Komponente unterstützt verschiedene Webtechnologien wie HTML5, CSS, JavaScript, DOM und SVG.
Mit WebView können Sie -
- Rendern Sie HTML-Inhalte von einer lokalen oder Remote-URL.
- Unterstützen Sie den Verlauf und bieten Sie die Navigation vor und zurück.
- Laden Sie den Inhalt neu.
- Wenden Sie Effekte auf die Webkomponente an.
- Bearbeiten Sie den HTML-Inhalt.
- Führen Sie JavaScript-Befehle aus.
- Ereignisse behandeln.
Im Allgemeinen können Sie mit WebView Webinhalte von Java aus steuern.
Media Engine
Das JavaFX media engine basiert auf einer Open-Source-Engine namens a Streamer. Diese Media Engine unterstützt die Wiedergabe von Video- und Audioinhalten.
Die JavaFX Media Engine bietet Unterstützung für Audio für die folgenden Dateiformate:
Audio |
|
---|---|
Video |
|
Das Paket javafx.scene.mediaenthält die Klassen und Schnittstellen zur Bereitstellung von Medienfunktionen in JavaFX. Es wird in Form von drei Komponenten bereitgestellt, die -
Media Object - Dies ist eine Mediendatei
Media Player - Zum Abspielen von Medieninhalten.
Media View - Zum Anzeigen von Medien.
In diesem Kapitel werden wir die Struktur einer JavaFX-Anwendung im Detail diskutieren und anhand eines Beispiels lernen, eine JavaFX-Anwendung zu erstellen.
JavaFX-Anwendungsstruktur
Im Allgemeinen besteht eine JavaFX-Anwendung nämlich aus drei Hauptkomponenten Stage, Scene und Nodes wie in der folgenden Abbildung gezeigt.
Bühne
Eine Stufe (ein Fenster) enthält alle Objekte einer JavaFX-Anwendung. Es wird vertreten durchStage Klasse des Pakets javafx.stage. Die Primärstufe wird von der Plattform selbst erstellt. Das erstellte Bühnenobjekt wird als Argument an das übergebenstart() Methode der Application Klasse (im nächsten Abschnitt erklärt).
Eine Stufe hat zwei Parameter, die nämlich ihre Position bestimmen Width und Height. Es ist unterteilt in Inhaltsbereich und Dekorationen (Titelleiste und Rahmen).
Es stehen fünf Arten von Stufen zur Verfügung:
- Decorated
- Undecorated
- Transparent
- Unified
- Utility
Sie müssen die anrufen show() Methode zum Anzeigen des Inhalts einer Bühne.
Szene
Eine Szene repräsentiert den physischen Inhalt einer JavaFX-Anwendung. Es enthält den gesamten Inhalt eines Szenendiagramms. Die KlasseScene des Pakets javafx.scenerepräsentiert das Szenenobjekt. In einer Instanz wird das Szenenobjekt nur einer Stufe hinzugefügt.
Sie können eine Szene erstellen, indem Sie die Szenenklasse instanziieren. Sie können die Größe der Szene festlegen, indem Sie die Abmessungen (Höhe und Breite) zusammen mit dem übergebenroot node zu seinem Konstruktor.
Szenendiagramm und Knoten
EIN scene graphist eine baumartige Datenstruktur (hierarchisch), die den Inhalt einer Szene darstellt. Im Gegensatz dazu anode ist ein visuelles / grafisches Objekt eines Szenendiagramms.
Ein Knoten kann enthalten -
Geometrische (grafische) Objekte (2D und 3D) wie - Kreis, Rechteck, Polygon usw.
UI-Steuerelemente wie - Schaltfläche, Kontrollkästchen, Auswahlfeld, Textbereich usw.
Container (Layoutfenster) wie Randfenster, Gitterfenster, Durchflussfenster usw.
Medienelemente wie Audio-, Video- und Bildobjekte.
Das Node Klasse des Pakets javafx.scene stellt einen Knoten in JavaFX dar, diese Klasse ist die Superklasse aller Knoten.
Wie bereits erwähnt, gibt es drei Arten von Knoten:
Root Node - Das erste Szenendiagramm wird als Root-Knoten bezeichnet.
Branch Node/Parent Node- Der Knoten mit untergeordneten Knoten wird als Zweig- / Elternknoten bezeichnet. Die abstrakte Klasse mit dem NamenParent des Pakets javafx.scene ist die Basisklasse aller übergeordneten Knoten, und diese übergeordneten Knoten sind vom folgenden Typ:
Group- Ein Gruppenknoten ist ein Sammelknoten, der eine Liste von untergeordneten Knoten enthält. Immer wenn der Gruppenknoten gerendert wird, werden alle untergeordneten Knoten der Reihe nach gerendert. Jeder auf die Gruppe angewendete Transformations- und Effektstatus wird auf alle untergeordneten Knoten angewendet.
Region - Dies ist die Basisklasse aller auf JavaFX-Knoten basierenden UI-Steuerelemente wie Diagramm, Bereich und Steuerelement.
WebView - Dieser Knoten verwaltet die Web-Engine und zeigt deren Inhalt an.
Leaf Node- Der Knoten ohne untergeordnete Knoten wird als Blattknoten bezeichnet. Beispielsweise sind Rechteck, Ellipse, Box, ImageView, MediaView Beispiele für Blattknoten.
Der Wurzelknoten muss zwingend an das Szenendiagramm übergeben werden. Wenn die Gruppe als Root übergeben wird, werden alle Knoten an die Szene gebunden, und jede Änderung der Größe der Szene wirkt sich nicht auf das Layout der Szene aus.
Erstellen einer JavaFX-Anwendung
Um eine JavaFX-Anwendung zu erstellen, müssen Sie die Application-Klasse instanziieren und ihre abstrakte Methode implementieren start(). In dieser Methode schreiben wir den Code für die JavaFX-Anwendung.
Anwendungsklasse
Das Application Klasse des Pakets javafx.applicationist der Einstiegspunkt der Anwendung in JavaFX. Um eine JavaFX-Anwendung zu erstellen, müssen Sie diese Klasse erben und ihre abstrakte Methode implementierenstart(). Bei dieser Methode müssen Sie den gesamten Code für die JavaFX-Grafiken schreiben
In dem main Methode müssen Sie die Anwendung mit der starten launch()Methode. Diese Methode ruft intern die aufstart() Methode der Anwendungsklasse wie im folgenden Programm gezeigt.
public class JavafxSample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
/*
Code for JavaFX application.
(Stage, scene, scene graph)
*/
}
public static void main(String args[]){
launch(args);
}
}
Innerhalb des start() Methode, um eine typische JavaFX-Anwendung zu erstellen, müssen Sie die folgenden Schritte ausführen:
Bereiten Sie ein Szenendiagramm mit den erforderlichen Knoten vor.
Bereiten Sie eine Szene mit den erforderlichen Abmessungen vor und fügen Sie das Szenendiagramm (Wurzelknoten des Szenendiagramms) hinzu.
Bereiten Sie eine Bühne vor, fügen Sie die Szene zur Bühne hinzu und zeigen Sie den Inhalt der Bühne an.
Vorbereiten des Szenendiagramms
Gemäß Ihrer Anwendung müssen Sie ein Szenendiagramm mit den erforderlichen Knoten erstellen. Da der Wurzelknoten der erste Knoten ist, müssen Sie einen Wurzelknoten erstellen. Als Wurzelknoten können Sie aus dem auswählenGroup, Region or WebView.
Group - Ein Gruppenknoten wird durch die benannte Klasse dargestellt Group welches zum Paket gehört javafx.scenekönnen Sie einen Gruppenknoten erstellen, indem Sie diese Klasse wie unten gezeigt instanziieren.
Group root = new Group();
Das getChildren() Methode der Group Klasse gibt Ihnen ein Objekt der ObservableListKlasse, die die Knoten enthält. Wir können dieses Objekt abrufen und Knoten hinzufügen, wie unten gezeigt.
//Retrieving the observable list object
ObservableList list = root.getChildren();
//Setting the text object as a node
list.add(NodeObject);
Wir können der Gruppe auch Knotenobjekte hinzufügen, indem wir sie einfach an die übergeben Group Klasse und an ihren Konstruktor zum Zeitpunkt der Instanziierung, wie unten gezeigt.
Group root = new Group(NodeObject);
Region - Es ist die Basisklasse aller JavaFX-Knoten-basierten UI-Steuerelemente, wie z.
Chart - Diese Klasse ist die Basisklasse aller Diagramme und gehört zum Paket javafx.scene.chart.
Diese Klasse hat zwei Unterklassen, die - PieChart und XYChart. Diese beiden haben wiederum Unterklassen wieAreaChart, BarChart, BubbleChartusw. zum Zeichnen verschiedener Arten von XY-Plane-Diagrammen in JavaFX.
Mit diesen Klassen können Sie Diagramme in Ihre Anwendung einbetten.
Pane - Ein Fenster ist die Basisklasse aller Layoutfenster wie z AnchorPane, BorderPane, DialogPaneusw. Diese Klasse gehört zu einem Paket, das als - bezeichnet wird. javafx.scene.layout.
Mit diesen Klassen können Sie vordefinierte Layouts in Ihre Anwendung einfügen.
Control - Dies ist die Basisklasse der Steuerelemente der Benutzeroberfläche, z Accordion, ButtonBar, ChoiceBox, ComboBoxBase, HTMLEditor, etc. This class belongs to the package javafx.scene.control.
Mit diesen Klassen können Sie verschiedene UI-Elemente in Ihre Anwendung einfügen.
In einer Gruppe können Sie jede der oben genannten Klassen instanziieren und als Stammknoten verwenden, wie im folgenden Programm gezeigt.
//Creating a Stack Pane
StackPane pane = new StackPane();
//Adding text area to the pane
ObservableList list = pane.getChildren();
list.add(NodeObject);
WebView - Dieser Knoten verwaltet die Web-Engine und zeigt deren Inhalt an.
Das folgende Diagramm zeigt die Knotenklassenhierarchie von JavaFX.
Szene vorbereiten
Eine JavaFX-Szene wird durch die dargestellt Scene Klasse des Pakets javafx.scene. Sie können eine Szene erstellen, indem Sie diese Klasse wie im folgenden Cod-Block gezeigt instanziieren.
Während der Instanziierung muss das Stammobjekt an den Konstruktor der Szenenklasse übergeben werden.
Scene scene = new Scene(root);
Sie können auch zwei Parameter vom Doppeltyp übergeben, die die Höhe und Breite der Szene darstellen (siehe unten).
Scene scene = new Scene(root, 600, 300);
Bühne vorbereiten
Dies ist der Container jeder JavaFX-Anwendung und bietet ein Fenster für die Anwendung. Es wird vertreten durch dieStage Klasse des Pakets javafx.stage. Ein Objekt dieser Klasse wird als Parameter der übergebenstart() Methode der Application Klasse.
Mit diesem Objekt können Sie verschiedene Operationen auf der Bühne ausführen. In erster Linie können Sie Folgendes ausführen:
Stellen Sie den Titel für die Bühne mit der Methode ein setTitle().
Befestigen Sie das Szenenobjekt mit der an der Bühne setScene() Methode.
Zeigen Sie den Inhalt der Szene mit dem an show() Methode wie unten gezeigt.
//Setting the title to Stage.
primaryStage.setTitle("Sample application");
//Setting the scene to Stage
primaryStage.setScene(scene);
//Displaying the stage
primaryStage.show();
Lebenszyklus der JavaFX-Anwendung
Die JavaFX-Anwendungsklasse verfügt über drei Lebenszyklusmethoden:
start() - Die Einstiegspunktmethode, in die der JavaFX-Grafikcode geschrieben werden soll.
stop() - Eine leere Methode, die überschrieben werden kann. Hier können Sie die Logik schreiben, um die Anwendung zu stoppen.
init() - Eine leere Methode, die überschrieben werden kann, mit der Sie jedoch keine Bühne oder Szene erstellen können.
Darüber hinaus bietet es eine statische Methode mit dem Namen launch() um die JavaFX-Anwendung zu starten.
Seit der launch()Methode ist statisch, Sie müssen sie aus einem statischen Kontext aufrufen (main im Allgemeinen). Bei jedem Start einer JavaFX-Anwendung werden die folgenden Aktionen ausgeführt (in derselben Reihenfolge).
Eine Instanz der Anwendungsklasse wird erstellt.
Init() Methode wird aufgerufen.
Das start() Methode wird aufgerufen.
Der Launcher wartet auf den Abschluss der Anwendung und ruft die auf stop() Methode.
Beenden der JavaFX-Anwendung
Wenn das letzte Fenster der Anwendung geschlossen wird, wird die JavaFX-Anwendung implizit beendet. Sie können dieses Verhalten deaktivieren, indem Sie den Booleschen Wert "False" an die statische Methode übergeben setImplicitExit() (sollte aus einem statischen Kontext aufgerufen werden).
Sie können eine JavaFX-Anwendung explizit mit den Methoden beenden Platform.exit() oder System.exit(int).
Beispiel 1 - Erstellen eines leeren Fensters
In diesem Abschnitt erfahren Sie, wie Sie eine JavaFX-Beispielanwendung erstellen, in der ein leeres Fenster angezeigt wird. Es folgen die Schritte -
Schritt 1: Erstellen einer Klasse
Erstellen Sie eine Java-Klasse und erben Sie die Application Klasse des Pakets javafx.application und implementieren Sie die start () -Methode dieser Klasse wie folgt.
public class JavafxSample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
}
}
Schritt 2: Erstellen eines Gruppenobjekts
In dem start() Die Methode erstellt ein Gruppenobjekt, indem sie die Klasse mit dem Namen Group instanziiert, die zum Paket gehört javafx.scene, wie folgt.
Group root = new Group();
Schritt 3: Erstellen eines Szenenobjekts
Erstellen Sie eine Szene, indem Sie die benannte Klasse instanziieren Scene welches zum Paket gehört javafx.scene. Übergeben Sie an diese Klasse das Group-Objekt(root), im vorherigen Schritt erstellt.
Zusätzlich zum Stammobjekt können Sie zwei doppelte Parameter übergeben, die Höhe und Breite des Bildschirms zusammen mit dem Objekt der Gruppenklasse wie folgt darstellen.
Scene scene = new Scene(root,600, 300);
Schritt 4: Festlegen des Titels der Bühne
Sie können den Titel mit der Taste auf die Bühne setzen setTitle() Methode der StageKlasse. DasprimaryStage ist ein Stage-Objekt, das als Parameter an die Startmethode der Szenenklasse übergeben wird.
Verwendung der primaryStage Objekt, setzen Sie den Titel der Szene als Sample Application Wie nachfolgend dargestellt.
primaryStage.setTitle("Sample Application");
Schritt 5: Hinzufügen einer Szene zur Bühne
Mit der Methode können Sie der Bühne ein Szenenobjekt hinzufügen setScene() der genannten Klasse Stage. Fügen Sie das in den vorherigen Schritten vorbereitete Szenenobjekt mit dieser Methode hinzu, wie unten gezeigt.
primaryStage.setScene(scene);
Schritt 6: Anzeigen des Bühneninhalts
Zeigen Sie den Inhalt der Szene mit der genannten Methode an show() des Stage Klasse wie folgt.
primaryStage.show();
Schritt 7: Starten der Anwendung
Starten Sie die JavaFX-Anwendung, indem Sie die statische Methode aufrufen launch() des Application Klasse aus der Hauptmethode wie folgt.
public static void main(String args[]){
launch(args);
}
Beispiel
Das folgende Programm generiert ein leeres JavaFX-Fenster. Speichern Sie diesen Code in einer Datei mit dem NamenJavafxSample.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavafxSample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
//creating a Group object
Group group = new Group();
//Creating a Scene by passing the group object, height and width
Scene scene = new Scene(group ,600, 300);
//setting color to the scene
scene.setFill(Color.BROWN);
//Setting the title to Stage.
primaryStage.setTitle("Sample Application");
//Adding the scene to Stage
primaryStage.setScene(scene);
//Displaying the contents of the stage
primaryStage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac JavafxSample.java
java JavafxSample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Beispiel 2 - Zeichnen einer geraden Linie
Im vorherigen Beispiel haben wir gesehen, wie eine leere Bühne erstellt wird. In diesem Beispiel versuchen wir nun, mithilfe der JavaFX-Bibliothek eine gerade Linie zu zeichnen.
Es folgen die Schritte -
Schritt 1: Erstellen einer Klasse
Erstellen Sie eine Java-Klasse und erben Sie die Application Klasse des Pakets javafx.application und implementieren die start() Methode dieser Klasse wie folgt.
public class DrawingLine extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
}
}
Schritt 2: Erstellen einer Linie
Sie können eine Zeile in JavaFX erstellen, indem Sie die benannte Klasse instanziieren Line welches zu einem Paket gehört javafx.scene.shapeInstanziieren Sie diese Klasse wie folgt.
//Creating a line object
Line line = new Line();
Schritt 3: Festlegen der Eigenschaften für die Linie
Geben Sie die Koordinaten an, um die Linie auf einer XY-Ebene zu zeichnen, indem Sie die Eigenschaften festlegen startX, startY, endX und endYunter Verwendung ihrer jeweiligen Setter-Methoden, wie im folgenden Codeblock gezeigt.
line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);
Schritt 4: Erstellen eines Gruppenobjekts
Erstellen Sie in der Methode start () ein Gruppenobjekt, indem Sie die Klasse Group instanziieren, die zum Paket javafx.scene gehört.
Übergeben Sie das im vorherigen Schritt erstellte Linienobjekt (Knotenobjekt) als Parameter an den Konstruktor der Gruppenklasse, um es wie folgt zur Gruppe hinzuzufügen:
Group root = new Group(line);
Schritt 5: Erstellen eines Szenenobjekts
Erstellen Sie eine Szene, indem Sie die benannte Klasse instanziieren Scene welches zum Paket gehört javafx.scene. Übergeben Sie an diese Klasse das Group-Objekt(root) das wurde im vorherigen Schritt erstellt.
Zusätzlich zum Stammobjekt können Sie zwei doppelte Parameter übergeben, die Höhe und Breite des Bildschirms zusammen mit dem Objekt der Gruppenklasse wie folgt darstellen.
Scene scene = new Scene(group ,600, 300);
Schritt 6: Festlegen des Titels der Bühne
Sie können den Titel mit der Taste auf die Bühne setzen setTitle() Methode der StageKlasse. DasprimaryStage ist ein Stage-Objekt, das als Parameter an die Startmethode der Szenenklasse übergeben wird.
Verwendung der primaryStage Objekt, setzen Sie den Titel der Szene als Sample Application wie folgt.
primaryStage.setTitle("Sample Application");
Schritt 7: Hinzufügen einer Szene zur Bühne
Mit der Methode können Sie der Bühne ein Szenenobjekt hinzufügen setScene() der genannten Klasse Stage. Fügen Sie das in den vorherigen Schritten mit dieser Methode vorbereitete Szenenobjekt wie folgt hinzu.
primaryStage.setScene(scene);
Schritt 8: Anzeigen des Bühneninhalts
Zeigen Sie den Inhalt der Szene mit der genannten Methode an show() des Stage Klasse wie folgt.
primaryStage.show();
Schritt 9: Starten der Anwendung
Starten Sie die JavaFX-Anwendung, indem Sie die statische Methode aufrufen launch() des Application Klasse aus der Hauptmethode wie folgt.
public static void main(String args[]){
launch(args);
}
Beispiel
Das folgende Programm zeigt, wie mit JavaFX eine gerade Linie generiert wird. Speichern Sie diesen Code in einer Datei mit dem NamenJavafxSample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
public class DrawingLine extends Application{
@Override
public void start(Stage stage) {
//Creating a line object
Line line = new Line();
//Setting the properties to a line
line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);
//Creating a Group
Group root = new Group(line);
//Creating a Scene
Scene scene = new Scene(root, 600, 300);
//Setting title to the scene
stage.setTitle("Sample application");
//Adding the scene to the stage
stage.setScene(scene);
//Displaying the contents of a scene
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac DrawingLine.java
java DrawingLine
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem eine gerade Linie angezeigt wird (siehe unten).
Beispiel 3 - Anzeigen von Text
Wir können auch Text in die JavaFX-Szene einbetten. Dieses Beispiel zeigt, wie Sie Text in JavaFX einbetten.
Es folgen die Schritte -
Schritt 1: Erstellen einer Klasse
Erstellen Sie eine Java-Klasse und erben Sie die Application Klasse des Pakets javafx.application und implementieren die start() Methode dieser Klasse wie folgt.
public class DrawingLine extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
}
}
Schritt 2: Einbetten von Text
Sie können Text in eine JavaFX-Szene einbetten, indem Sie die benannte Klasse instanziieren Text welches zu einem Paket gehört javafx.scene.shape, instanziiere diese Klasse.
Sie können diese Klasse instanziieren, indem Sie einzubettenden Text im Zeichenfolgenformat übergeben. Sie können auch ein Textobjekt mit dem unten gezeigten Standardkonstruktor erstellen.
//Creating a Text object
Text text = new Text();
Schritt 3: Einstellen der Schriftart
Sie können die Schriftart mit dem Text auf den Text einstellen setFont() Methode der TextKlasse. Diese Methode akzeptiert ein Schriftobjekt als Parameter. Stellen Sie die Schriftart des angegebenen Textes wie unten gezeigt auf 45 ein.
//Setting font to the text
text.setFont(new Font(45));
Schritt 4: Festlegen der Position des Textes
Sie können die Position des Texts in der XY-Ebene festlegen, indem Sie die X- und Y-Koordinaten mit den entsprechenden Setter-Methoden festlegen setX() und setY() wie folgt.
//setting the position of the text
text.setX(50);
text.setY(150);
Schritt 5: Festlegen des hinzuzufügenden Textes
Sie können den hinzuzufügenden Text mit der Methode setText () der Textklasse festlegen. Diese Methode akzeptiert einen Zeichenfolgenparameter, der den hinzuzufügenden Text darstellt.
text.setText("Welcome to Tutorialspoint");
Schritt 6: Erstellen eines Gruppenobjekts
In dem start() Erstellen Sie ein Gruppenobjekt, indem Sie die Klasse mit dem Namen Group instanziieren, die zum Paket gehört javafx.scene.
Übergeben Sie das im vorherigen Schritt erstellte Textobjekt (Knotenobjekt) als Parameter an den Konstruktor der Group-Klasse, um es wie folgt zur Gruppe hinzuzufügen:
Group root = new Group(text)
Schritt 7: Erstellen eines Szenenobjekts
Erstellen Sie eine Szene, indem Sie die benannte Klasse instanziieren Scene welches zum Paket gehört javafx.scene. Übergeben Sie an diese Klasse das Group-Objekt(root), im vorherigen Schritt erstellt.
Zusätzlich zum Stammobjekt können Sie zwei doppelte Parameter übergeben, die Höhe und Breite des Bildschirms zusammen mit dem Objekt der Gruppenklasse wie folgt darstellen.
Scene scene = new Scene(group ,600, 300);
Schritt 8: Festlegen des Titels der Bühne
Sie können den Titel mit der Taste auf die Bühne setzen setTitle() Methode der StageKlasse. DasprimaryStage ist ein Stage-Objekt, das als Parameter an die Startmethode der Szenenklasse übergeben wird.
Verwendung der primaryStage Objekt, setzen Sie den Titel der Szene als Sample Application Wie nachfolgend dargestellt.
primaryStage.setTitle("Sample Application");
Schritt 9: Hinzufügen einer Szene zur Bühne
Mit der Methode können Sie der Bühne ein Szenenobjekt hinzufügen setScene() der genannten Klasse Stage. Fügen Sie das in den vorherigen Schritten mit dieser Methode vorbereitete Szenenobjekt wie folgt hinzu.
primaryStage.setScene(scene);
Schritt 10: Anzeigen des Bühneninhalts
Zeigen Sie den Inhalt der Szene mit der genannten Methode an show() des Stage Klasse wie folgt.
primaryStage.show();
Schritt 11: Starten der Anwendung
Starten Sie die JavaFX-Anwendung, indem Sie die statische Methode aufrufen launch() des Application Klasse aus der Hauptmethode wie folgt.
public static void main(String args[]){
launch(args);
}
Beispiel
Im Folgenden finden Sie das Programm zum Anzeigen von Text mit JavaFX. Speichern Sie diesen Code in einer Datei mit NamenDisplayingText.java.
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class DisplayingText extends Application {
@Override
public void start(Stage stage) {
//Creating a Text object
Text text = new Text();
//Setting font to the text
text.setFont(new Font(45));
//setting the position of the text
text.setX(50);
text.setY(150);
//Setting the text to be added.
text.setText("Welcome to Tutorialspoint");
//Creating a Group object
Group root = new Group();
//Retrieving the observable list object
ObservableList list = root.getChildren();
//Setting the text object as a node to the group object
list.add(text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Sample Application");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac DisplayingText.java
java DisplayingText
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem der unten gezeigte Text angezeigt wird.
Im vorherigen Kapitel haben wir die grundlegende Anwendung von JavaFX gesehen, in der wir gelernt haben, wie man ein leeres Fenster erstellt und wie man eine Linie auf einer XY-Ebene von JavaFX zeichnet. Neben der Linie können wir auch mehrere andere 2D-Formen zeichnen.
2D-Form
Im Allgemeinen ist eine 2D-Form eine geometrische Figur, die in der XY-Ebene gezeichnet werden kann. Dazu gehören Linie, Rechteck, Kreis usw.
Mit der JavaFX-Bibliothek können Sie zeichnen:
Vordefinierte Formen wie Linie, Rechteck, Kreis, Ellipse, Polygon, Polylinie, kubische Kurve, Quad-Kurve, Bogen.
Pfadelemente wie MoveTO-Pfadelement, Linie, horizontale Linie, vertikale Linie, kubische Kurve, quadratische Kurve, Bogen.
Darüber hinaus können Sie eine 2D-Form zeichnen, indem Sie den SVG-Pfad analysieren.
Jede der oben genannten 2D-Formen wird durch eine Klasse dargestellt, und alle diese Klassen gehören zum Paket javafx.scene.shape. Die benannte KlasseShape ist die Basisklasse aller zweidimensionalen Formen in JavaFX.
Erstellen einer 2D-Form
Um ein Diagramm zu erstellen, müssen Sie -
- Instanziieren Sie die jeweilige Klasse der gewünschten Form.
- Legen Sie die Eigenschaften der Form fest.
- Fügen Sie das Formobjekt der Gruppe hinzu.
Instanziieren der jeweiligen Klasse
Um eine zweidimensionale Form zu erstellen, müssen Sie zunächst die jeweilige Klasse instanziieren.
Wenn Sie beispielsweise eine Linie erstellen möchten, müssen Sie die Klasse Line wie folgt instanziieren:
Line line = new Line();
Festlegen der Eigenschaften der Form
Nach dem Instanziieren der Klasse müssen Sie die Eigenschaften für die Form mithilfe der Setter-Methoden festlegen.
Um beispielsweise eine Linie zu zeichnen, müssen Sie die x- und y-Koordinaten des Start- und Endpunkts der Linie übergeben. Sie können diese Werte mit den jeweiligen Setter-Methoden wie folgt angeben:
//Setting the Properties of the Line
line.setStartX(150.0f);
line.setStartY(140.0f);
line.setEndX(450.0f);
line.setEndY(140.0f);
Hinzufügen des Formobjekts zur Gruppe
Schließlich müssen Sie das Objekt der Form zur Gruppe hinzufügen, indem Sie es wie unten gezeigt als Parameter des Konstruktors übergeben.
//Creating a Group object
Group root = new Group(line);
In der folgenden Tabelle finden Sie eine Liste der verschiedenen Formen (Klassen), die von JavaFX bereitgestellt werden.
S.No. | Form & Beschreibung |
---|---|
1 | Linie Eine Linie ist eine geometrische Struktur, die zwei Punkte verbindet. DasLine Klasse des Pakets javafx.scene.shape repräsentiert eine Linie in der XY-Ebene. |
2 | Rechteck Im Allgemeinen ist ein Rechteck ein vierseitiges Polygon mit zwei Paaren paralleler und gleichzeitiger Seiten, wobei alle Innenwinkel rechtwinklig sind. In JavaFX wird ein Rechteck durch eine Klasse mit dem Namen dargestelltRectangle. Diese Klasse gehört zum Paketjavafx.scene.shape. |
3 | Rechteck mit abgerundeten Ecken In JavaFX können Sie ein Rechteck entweder mit scharfen Kanten oder mit gewölbten Kanten zeichnen. Das Rechteck mit gewölbten Kanten wird als abgerundetes Rechteck bezeichnet. |
4 | Kreis Ein Kreis ist eine Linie, die eine geschlossene Schleife bildet, wobei jeder Punkt einen festen Abstand von einem Mittelpunkt hat. In JavaFX wird ein Kreis durch eine Klasse mit dem Namen dargestelltCircle. Diese Klasse gehört zum Paketjavafx.scene.shape. |
5 | Ellipse Eine Ellipse wird durch zwei Punkte definiert, die jeweils als Fokus bezeichnet werden. Wenn ein Punkt auf der Ellipse genommen wird, ist die Summe der Abstände zu den Fokuspunkten konstant. Die Größe der Ellipse wird durch die Summe dieser beiden Abstände bestimmt. In JavaFX wird eine Ellipse durch eine Klasse mit dem Namen dargestellt Ellipse. Diese Klasse gehört zum Paketjavafx.scene.shape. |
6 | Polygon Eine geschlossene Form, die durch eine Anzahl von koplanaren Liniensegmenten gebildet wird, die Ende an Ende verbunden sind. In JavaFX wird ein Polygon durch eine Klasse mit dem Namen dargestelltPolygon. Diese Klasse gehört zum Paketjavafx.scene.shape. |
7 | Polylinie Eine Polylinie ist dasselbe wie ein Polygon, außer dass eine Polylinie am Ende nicht geschlossen wird. Oder eine durchgehende Linie, die aus einem oder mehreren Liniensegmenten besteht. In JavaFX wird eine Polylinie durch eine Klasse mit dem Namen dargestelltPolygon. Diese Klasse gehört zum Paketjavafx.scene.shape. |
8 | Kubische Kurve Eine kubische Kurve ist eine Bezier-Parameterkurve in der XY-Ebene ist eine Kurve vom Grad 3. In JavaFX wird eine kubische Kurve durch eine Klasse mit dem Namen dargestellt CubicCurve. Diese Klasse gehört zum Paketjavafx.scene.shape. |
9 | QuadCurve Eine quadratische Kurve ist eine Bezier-Parameterkurve in der XY-Ebene ist eine Kurve vom Grad 2. In JavaFX wird eine QuadCurve durch eine Klasse namens QuadCurve dargestellt. Diese Klasse gehört zum Paketjavafx.scene.shape. |
10 | Bogen Ein Bogen ist Teil einer Kurve. In JavaFX wird ein Bogen durch eine Klasse mit dem Namen dargestelltArc. Diese Klasse gehört zum Paket -javafx.scene.shape. Arten von LichtbögenZusätzlich können wir drei Arten von Bögen zeichnen Open, Chord, Round. |
11 | SVGPath In JavaFX können wir Bilder erstellen, indem wir SVG-Pfade analysieren. Solche Formen werden durch die genannte Klasse dargestelltSVGPath. Diese Klasse gehört zum Paketjavafx.scene.shape. Diese Klasse hat eine Eigenschaft namenscontentdes String-Datentyps. Dies stellt die SVG-Pfad-codierte Zeichenfolge dar, aus der das Bild gezeichnet werden soll. |
Mehr Formen durch die Pfadklasse zeichnen
Im vorherigen Abschnitt haben wir gesehen, wie Sie einige einfache vordefinierte Formen zeichnen, indem Sie Klassen instanziieren und entsprechende Parameter festlegen.
Nur diese vordefinierten Formen reichen jedoch nicht aus, um komplexere Formen als die von der javafx.shape package.
Wenn Sie beispielsweise ein grafisches Element wie im folgenden Diagramm dargestellt zeichnen möchten, können Sie sich nicht auf diese einfachen Formen verlassen.
Die Pfadklasse
Um solche komplexen Strukturen zu zeichnen, stellt JavaFX eine Klasse mit dem Namen bereit Path. Diese Klasse repräsentiert den geometrischen Umriss einer Form.
Es ist einer beobachtbaren Liste beigefügt, die verschiedene enthält Path Elements wie moveTo, LineTo, HlineTo, VlineTo, ArcTo, QuadCurveTo, CubicCurveTo.
Beim Instanziieren erstellt diese Klasse einen Pfad basierend auf den angegebenen Pfadelementen.
Sie können die Pfadelemente an diese Klasse übergeben, während Sie sie wie folgt instanziieren:
Path myshape = new Path(pathElement1, pathElement2, pathElement3);
Oder Sie können die beobachtbare Liste abrufen und alle Pfadelemente mit hinzufügen addAll() Methode wie folgt -
Path myshape = new Path();
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3);
Sie können Elemente auch einzeln mit der Methode add () hinzufügen als -
Path myshape = new Path();
myshape.getElements().add(pathElement1);
Das Element "Zum Pfad verschieben"
Das Pfadelement MoveTowird verwendet, um die aktuelle Position des Pfads an einen bestimmten Punkt zu verschieben. Es wird im Allgemeinen verwendet, um den Startpunkt einer Form festzulegen, die mit den Pfadelementen gezeichnet wurde.
Es wird durch eine Klasse mit dem Namen dargestellt LineTo des Pakets javafx.scene.shape. Es hat 2 Eigenschaften des doppelten Datentyps, nämlich -
X - Die x-Koordinate des Punktes, zu dem eine Linie von der aktuellen Position gezogen werden soll.
Y - Die y-Koordinate des Punktes, zu dem eine Linie von der aktuellen Position gezogen werden soll.
Sie können ein Element zum Verschieben zum Pfad erstellen, indem Sie die MoveTo-Klasse instanziieren und die x, y-Koordinaten des neuen Punkts wie folgt übergeben:
MoveTo moveTo = new MoveTo(x, y);
Wenn Sie dem Konstruktor keine Werte übergeben, wird der neue Punkt auf (0,0) gesetzt.
Sie können auch Werte für die x-, y-Koordinate festlegen, indem Sie die entsprechenden Setter-Methoden wie folgt verwenden:
setX(value);
setY(value);
Beispiel - Zeichnen eines komplexen Pfades
In diesem Beispiel zeigen wir, wie Sie die folgende Form mit dem zeichnen Path, MoveTo und Line Klassen.
Speichern Sie diesen Code in einer Datei mit dem Namen ComplexShape.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
public class ComplexShape extends Application {
@Override
public void start(Stage stage) {
//Creating a Path
Path path = new Path();
//Moving to the starting point
MoveTo moveTo = new MoveTo(108, 71);
//Creating 1st line
LineTo line1 = new LineTo(321, 161);
//Creating 2nd line
LineTo line2 = new LineTo(126,232);
//Creating 3rd line
LineTo line3 = new LineTo(232,52);
//Creating 4th line
LineTo line4 = new LineTo(269, 250);
//Creating 4th line
LineTo line5 = new LineTo(108, 71);
//Adding all the elements to the path
path.getElements().add(moveTo);
path.getElements().addAll(line1, line2, line3, line4, line5);
//Creating a Group object
Group root = new Group(path);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing an arc through a path");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac ComplexShape.java
java ComplexShape
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem ein Bogen angezeigt wird, der wie unten gezeigt von der aktuellen Position zum angegebenen Punkt gezeichnet wird.
Im Folgenden sind die verschiedenen Pfadelemente (Klassen) aufgeführt, die von JavaFX bereitgestellt werden. Diese Klassen sind im Paket vorhandenjavafx.shape. Alle diese Klassen erben die KlassePathElement.
S.No. | Form & Beschreibung |
---|---|
1 | LineTo Das Pfadelement linewird verwendet, um eine gerade Linie zu einem Punkt in den angegebenen Koordinaten von der aktuellen Position zu zeichnen. Es wird durch eine Klasse mit dem Namen dargestelltLineTo. Diese Klasse gehört zum Paketjavafx.scene.shape. |
2 | HlineTo Das Pfadelement HLineTowird verwendet, um eine horizontale Linie zu einem Punkt in den angegebenen Koordinaten von der aktuellen Position zu zeichnen. Es wird durch eine Klasse mit dem Namen dargestelltHLineTo. Diese Klasse gehört zum Paketjavafx.scene.shape. |
3 | VLineTo Das Pfadelement vertical linewird verwendet, um eine vertikale Linie zu einem Punkt in den angegebenen Koordinaten von der aktuellen Position zu zeichnen. Es wird durch eine Klasse mit dem Namen dargestelltVLineTo. Diese Klasse gehört zum Paketjavafx.scene.shape. |
4 | QuadCurveTo Die quadratische Kurve des Pfadelements wird zum Zeichnen von a verwendet quadratic curvezu einem Punkt in den angegebenen Koordinaten von der aktuellen Position. Es wird durch eine Klasse mit dem Namen dargestelltQuadraticCurveTo. Diese Klasse gehört zum Paketjavafx.scene.shape. |
5 | CubicCurveTo Das Pfadelement cubic curvewird verwendet, um eine kubische Kurve von der aktuellen Position zu einem Punkt in den angegebenen Koordinaten zu zeichnen. Es wird durch eine Klasse mit dem Namen dargestelltCubicCurveTo. Diese Klasse gehört zum Paketjavafx.scene.shape. |
6 | ArcTo Das Pfadelement Arcwird verwendet, um einen Bogen von der aktuellen Position zu einem Punkt in den angegebenen Koordinaten zu zeichnen. Es wird durch eine Klasse mit dem Namen dargestelltArcTo. Diese Klasse gehört zum Paketjavafx.scene.shape. |
Eigenschaften von 2D-Objekten
Für alle zweidimensionalen Objekte können Sie verschiedene Eigenschaften wie Füllung, Strich, Strichart usw. festlegen. Im folgenden Abschnitt werden verschiedene Eigenschaften von 2D-Objekten erläutert.
- Strichart
- Strichbreite
- Strichfüllung
- Stroke
- Strichlinie
- Hubgehrungsgrenze
- Strichlinienkappe
- Smooth
Operationen an 2D-Objekten
Wenn wir einer Gruppe mehr als eine Form hinzufügen, überlappt sich die erste Form mit der zweiten, wie unten gezeigt.
Zusätzlich zu den Transformationen (Drehen, Skalieren, Übersetzen usw.) und Übergängen (Animationen) können Sie auch drei Operationen an 2D-Objekten ausführen, nämlich: Union, Subtraction und Intersection.
S.No. | Operationsbeschreibung |
---|---|
1 | Union Operation Diese Operation nimmt zwei oder mehr Formen als Eingaben an und gibt den von ihnen belegten Bereich zurück. |
2 | Kreuzungsbetrieb Diese Operation nimmt zwei oder mehr Formen als Eingaben an und gibt den Schnittbereich zwischen ihnen zurück. |
3 | Subtraktionsoperation Diese Operation nimmt zwei oder mehr Formen als Eingabe an. Dann wird der Bereich der ersten Form zurückgegeben, mit Ausnahme des Bereichs, der von der zweiten überlappt wird. |
Wie bei verschiedenen Formen können Sie auch in JavaFX einen Textknoten erstellen. Der Textknoten wird durch die benannte Klasse dargestelltText, die zum Paket gehört javafx.scene.text.
Diese Klasse enthält mehrere Eigenschaften, um Text in JavaFX zu erstellen und sein Erscheinungsbild zu ändern. Diese Klasse erbt auch die Shape-Klasse, die zum Paket gehörtjavafx.scene.shape.
Daher erbt es neben den Eigenschaften des Textes wie Schriftart, Ausrichtung, Zeilenabstand, Text usw. auch die grundlegenden Eigenschaften des Formknotens wie z strokeFill, stroke, strokeWidth, strokeType, usw.
Erstellen eines Textknotens
Seit der Klasse Text des Pakets javafx.scene.text stellt den Textknoten in JavaFX dar. Sie können einen Text erstellen, indem Sie diese Klasse wie folgt instanziieren:
Text text = new Text();
Die Klasse Text enthält eine Eigenschaft mit dem Namen text vom Typ string, der den zu erstellenden Text darstellt.
Nachdem Sie die Text-Klasse instanziiert haben, müssen Sie den Wert für diese Eigenschaft mithilfe von festlegen setText() Methode wie unten gezeigt.
String text = "Hello how are you"
Text.setText(text);
Sie können auch die Position (den Ursprung) des Textes festlegen, indem Sie die Werte für die Eigenschaften x und y mit den jeweiligen Setter-Methoden angeben setX() und setY() wie im folgenden Codeblock gezeigt -
text.setX(50);
text.setY(50);
Beispiel
Das folgende Programm zeigt anhand eines Beispiels, wie ein Textknoten in JavaFX erstellt wird. Speichern Sie diesen Code in einer Datei mit NamenTextExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Text;
public class TextExample extends Application {
@Override
public void start(Stage stage) {
//Creating a Text object
Text text = new Text();
//Setting the text to be added.
text.setText("Hello how are you");
//setting the position of the text
text.setX(50);
text.setY(50);
//Creating a Group object
Group root = new Group(text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Sample Application");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac TextExample.java
java TextExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem der angegebene Text wie folgt angezeigt wird:
Position und Schriftart des Textes
Standardmäßig hat der von der Textklasse erstellte Text die Schriftart…, Größe… und die Farbe Schwarz.
Sie können die Schriftgröße und Farbe des Textes mit der Taste ändern setFont()Methode. Diese Methode akzeptiert ein Objekt derFont Klasse.
Die benannte Klasse Font des Pakets javafx.scene.textwird verwendet, um die Schriftart für den Text zu definieren. Diese Klasse enthält eine statische Methode mit dem Namenfont().
Diese Methode akzeptiert vier Parameter, nämlich -
family - Dies ist ein String-Typ und repräsentiert die Familie der Schriftart, die wir auf den Text anwenden möchten.
weight- Diese Eigenschaft repräsentiert das Gewicht der Schriftart. Es akzeptiert 9 Werte, die -FontWeight.BLACK, FontWeight.BOLD, FontWeight.EXTRA_BOLD, FontWeight.EXTRA_LIGHT, LIGHT, MEDIUM, NORMAL, SEMI_BOLD, THIN.
posture- Diese Eigenschaft repräsentiert die Schrifthaltung (normal oder kursiv). Es akzeptiert zwei WerteFontPosture.REGULAR und FontPosture.ITALIC.
size - Diese Eigenschaft ist vom Typ double und repräsentiert die Größe der Schriftart.
Sie können die Schriftart für den Text mithilfe der folgenden Methode festlegen:
text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));
Beispiel
Das folgende Programm zeigt anhand eines Beispiels, wie die Schriftart des Textknotens in JavaFX festgelegt wird. Hier setzen wir die Schriftart auf Verdana, das Gewicht auf Fettdruck, die Haltung auf Normal und die Größe auf 20.
Speichern Sie diesen Code in einer Datei mit dem Namen TextFontExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class TextFontExample extends Application {
@Override
public void start(Stage stage) {
//Creating a Text object
Text text = new Text();
//Setting font to the text
text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));
//setting the position of the text
text.setX(50);
text.setY(130);
//Setting the text to be added.
text.setText("Hi how are you");
//Creating a Group object
Group root = new Group(text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Setting Font to the text");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac TextFontExample.java
java TextFontExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem der Text mit der angegebenen Schriftart wie folgt angezeigt wird:
Strich und Farbe
Die Text-Klasse erbt auch die Klassenform des Pakets. Daher können Sie verwendenjavafx.scene.shape mit dem Sie den Strich und die Farbe auch auf den Textknoten einstellen können.
Sie können die Farbe auf den Text einstellen, indem Sie die setFill() Methode der Formklasse (geerbt) wie folgt -
text.setFill(Color.BEIGE);
Ebenso können Sie die Strichfarbe des Textes mithilfe der Methode festlegen setStroke(). Während die Breite des Strichs mit der Methode eingestellt werden kannsetStrokeWidth() wie folgt -
//Setting the color
text.setFill(Color.BROWN);
//Setting the Stroke
text.setStrokeWidth(2);
//Setting the stroke color
text.setStroke(Color.BLUE);
Beispiel
Das folgende Programm ist ein Beispiel, das zeigt, wie die Farbe StrokeWidth und StrokeColor des Textknotens festgelegt werden. In diesem Code setzen wir die Strichfarbe auf - Blau, die Textfarbe auf - Braun und die Strichbreite auf - 2.
Speichern Sie diesen Code in einer Datei mit dem Namen StrokeExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class StrokeExample extends Application {
@Override
public void start(Stage stage) {
//Creating a Text object
Text text = new Text();
//Setting font to the text
text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 50));
//setting the position of the text
text.setX(50);
text.setY(130);
//Setting the color
text.setFill(Color.BROWN);
//Setting the Stroke
text.setStrokeWidth(2);
// Setting the stroke color
text.setStroke(Color.BLUE);
//Setting the text to be added.
text.setText("Hi how are you");
//Creating a Group object
Group root = new Group(text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Setting font to the text");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac StrokeExample.java
java StrokeExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem der Text mit den angegebenen Strich- und Farbattributen wie folgt angezeigt wird:
Dekorationen auf Text anwenden
Sie können auch Dekorationen wie Durchstreichen anwenden. In diesem Fall wird eine Zeile durch den Text geführt. Sie können einen Text mit den Methoden von unterstreichenText Klasse.
Sie können den Text mit der Methode durchstreichen setStrikethrough(). Dies akzeptiert einen Booleschen Wert, übergeben Sie den Werttrue zu dieser Methode, um durch den Text zu streichen, wie im folgenden Codefeld gezeigt -
//Striking through the text
text1.setStrikethrough(true);
Auf die gleiche Weise können Sie einen Text unterstreichen, indem Sie den Wert übergeben true zur Methode setUnderLine() wie folgt -
//underlining the text
text2.setUnderline(true);
Beispiel
Das folgende Programm zeigt anhand eines Beispiels, wie Dekorationen wie z underline oder strike throughzu einem Text. Speichern Sie diesen Code in einer Datei mit dem NamenDecorationsExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class DecorationsExample extends Application {
@Override
public void start(Stage stage) {
//Creating a Text_Example object
Text text1 = new Text("Hi how are you");
//Setting font to the text
text1.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));
//setting the position of the text
text1.setX(50);
text1.setY(75);
//Striking through the text
text1.setStrikethrough(true);
//Creating a Text_Example object
Text text2 = new Text("Welcome to Tutorialspoint");
//Setting font to the text
text2.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));
//setting the position of the text
text2.setX(50);
text2.setY(150);
//underlining the text
text2.setUnderline(true);
//Creating a Group object
Group root = new Group(text1, text2);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Decorations Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac DecorationsExample.java
java DecorationsExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt -
Ein Effekt ist eine Aktion, die das Erscheinungsbild der Grafiken verbessert. In JavaFX ist ein Effekt ein Algorithmus, der auf Knoten angewendet wird, um deren Erscheinungsbild visuell zu verbessern. Die Wirkungseigenschaft desNode Klasse wird verwendet, um den Effekt anzugeben.
In JavaFX können Sie verschiedene Effekte für einen Knoten festlegen, z bloom, blur und glow. Jeder dieser Effekte wird durch eine Klasse dargestellt, und alle diese Klassen sind in einem Paket mit dem Namen verfügbarjavafx.scene.effect.
Anwenden von Effekten auf einen Knoten
Sie können einen Effekt auf einen Knoten anwenden, indem Sie die Option verwenden setEffect()Methode. An diese Methode müssen Sie das Objekt des Effekts übergeben.
Um einen Effekt auf einen Knoten anzuwenden, müssen Sie -
Erstellen Sie den Knoten.
Instanziieren Sie die jeweilige Klasse des Effekts, der angewendet werden muss.
Legen Sie die Eigenschaften des Effekts fest.
Wenden Sie den Effekt mit dem auf den Knoten an setEffect() Methode.
Erstellen der Knoten
Erstellen Sie zunächst die Knoten in einer JavaFX-Anwendung, indem Sie ihre jeweiligen Klassen instanziieren.
Zum Beispiel, wenn Sie einen Glow-Effekt auf ein Bild in Ihrer Anwendung anwenden möchten. Zunächst müssen Sie einen Bildknoten erstellen, indem Sie die Bildklasse instanziieren und ihre Ansicht wie unten gezeigt festlegen.
//Creating an image
Image image = new Image("https://www.tutorialspoint.com/green/images/logo.png");
//Setting the image view
ImageView imageView = new ImageView(image);
//Setting the position of the image
imageView.setX(100);
imageView.setY(70);
//setting the fit height and width of the image view
imageView.setFitHeight(200);
imageView.setFitWidth(400);
//Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);
Instanziieren der jeweiligen Klasse
Instanziieren Sie die Klasse, die den Effekt darstellt, der auf den erstellten Knoten angewendet werden muss.
Zum Beispiel - Um den Glow-Effekt anzuwenden, müssen Sie den instanziieren Glow Klasse wie im folgenden Codefeld gezeigt -
Glow glow = new Glow();
Festlegen der Eigenschaften des Effekts
Nach dem Instanziieren der Klasse müssen Sie die Eigenschaften für den Effekt mithilfe der Setter-Methoden festlegen.
Beispiel: Um eine dreidimensionale Box zu zeichnen, müssen Sie deren Breite, Höhe und Tiefe übergeben. Sie können diese Werte mit ihren jeweiligen Setter-Methoden angeben, wie unten gezeigt -
//setting the level property
glow.setLevel(0.9);
Hinzufügen eines Effekts zum Knoten
Schließlich können Sie den erforderlichen Effekt mit dem auf den Knoten anwenden setEffect()Methode. Beispiel: Um den Glow-Effekt auf den Bildknoten festzulegen, müssen Sie das Objekt der Glow-Klasse wie folgt an diese Methode übergeben:
imageView.setEffect(glow);
JavaFX Effects- Die folgende Tabelle enthält eine Liste der verschiedenen von JavaFX bereitgestellten Effekte (Klassen). Diese Klassen sind im aufgerufenen Paket vorhandenjavafx.scene.effect.
S.No. | Form und Beschreibung |
---|---|
1 | Farbanpassung Sie können die Farbe eines Bildes anpassen, indem Sie den Farbanpassungseffekt darauf anwenden. Dies beinhaltet die Einstellung derhue, saturation, brightness und contrast auf jedem Pixel Die benannte Klasse ColorAdjust des Pakets javafx.scene.effect repräsentiert den Farbanpassungseffekt. |
2 | Farbeingabe Der Farbeingabeeffekt liefert die gleiche Ausgabe wie das Zeichnen und Füllen eines Rechtecks mit Farbe. Im Gegensatz zu anderen Effekten wird bei Anwendung dieses Effekts auf einen Knoten nur ein rechteckiges Feld angezeigt (nicht der Knoten). Dieser Effekt wird meistens als Eingabe für andere Effekte verwendet. Die benannte Klasse ColorInput des Pakets javafx.scene.effect repräsentiert den Farbeingabeeffekt. |
3 | Bildeingabe Der Bildeingabeeffekt in JavaFX bettet nur ein Bild in den JavaFX-Bildschirm ein. Genau wie der Farbeingabeeffekt (wird verwendet, um den angegebenen farbigen rechteckigen Bereich als Eingabe an einen anderen Effekt zu übergeben) wird der Bildeingabeeffekt verwendet, um das angegebene Bild als Eingabe an einen anderen Effekt zu übergeben. Die benannte Klasse ImageInput des Pakets javafx.scene.effect repräsentiert den Bildeingabeeffekt. |
4 | Mischung Im Allgemeinen bedeutet Mischen eine Mischung aus zwei oder mehr verschiedenen Dingen oder Substanzen. Wenn wir diesen Überblendungseffekt anwenden, werden die Pixel von zwei verschiedenen Eingaben an derselben Stelle verwendet und eine kombinierte Ausgabe basierend auf dem erzeugtblend mode. Die benannte Klasse Blend des Pakets javafx.scene.effect repräsentiert den Mischungseffekt. |
5 | blühen Beim Anwenden des Bloom-Effekts werden Pixel in einigen Teilen des Knotens zum Leuchten gebracht. Die benannte Klasse Bloom des Pakets javafx.scene.effect repräsentiert den Bloom-Effekt. |
6 | Glühen Genau wie bei Bloom lässt der Glow-Effekt das angegebene Eingabebild leuchten. Durch diesen Effekt werden die hellen Pixel der Eingabe heller. Die benannte Klasse Glow des Pakets javafx.scene.effect repräsentiert den Glow-Effekt. |
7 | Box Unschärfe Wenn dieser Unschärfeeffekt auf einen Knoten angewendet wird, wird er unklar. Box Blur ist eine Art Unschärfeeffekt, der von JavaFX bereitgestellt wird. In diesem Effekt wird beim Anwenden von Unschärfe auf einen Knoten ein einfacher Boxfilter verwendet. Die benannte Klasse BoxBlur des Pakets javafx.scene.effect repräsentiert den Boxblur-Effekt. |
8 | GaussianBlur Genau wie Box Blur ist Gaussian ein Effekt, um die Knoten in JavaFX zu verwischen. Der einzige Unterschied in derGaussian Blur effect ist, dass ein Gaußscher Faltungskern verwendet wird, um einen Unschärfeeffekt zu erzeugen. Die Klasse mit dem Namen GaussianBlur des Pakets javafx.scene.effect repräsentiert den Gaußschen Weichzeichnungseffekt. |
9 | Bewegungsunschärfe Genau wie Gaußsche Effekte ist Bewegungsunschärfe ein Effekt zum Verwischen der Knoten in JavaFX. Es wird auch ein Gaußscher Faltungskern verwendet, um einen Unschärfeeffekt zu erzeugen. Der Unterschied besteht jedoch darin, dass der Gaußsche Faltungskern mit einem bestimmten Winkel verwendet wird. Die benannte Klasse MotionBlur des Pakets javafx.scene.effect repräsentiert den Bewegungsunschärfeeffekt. |
10 | Reflexion Beim Anwenden des Reflexionseffekts auf einen Knoten in JavaFX wird eine Reflexion davon am unteren Rand des Knotens hinzugefügt. Die benannte Klasse Reflection des Pakets javafx.scene.effect repräsentiert den Reflexionseffekt. |
11 | SepiaTone Wenn Sie den Sepia-Toneffekt auf einen Knoten in JavaFX anwenden (Bild im Allgemeinen), wird er mit einer rotbraunen Farbe getönt. Die benannte Klasse SepiaTone des Pakets javafx.scene.effect repräsentiert den Sepia-Toneffekt. |
12 | Schatten Dieser Effekt erstellt ein Duplikat des angegebenen Knotens mit unscharfen Kanten. Die benannte Klasse Shadow des Pakets javafx.scene.effect repräsentiert den Sepia-Toneffekt. |
13 | DropShadow Wenn Sie diesen Effekt auf einen Knoten anwenden, wird hinter dem angegebenen Knoten ein Schatten erstellt. Die benannte Klasse DropShadow des Pakets javafx.scene.effect repräsentiert den Schlagschatteneffekt. |
14 | Inneren Schatten Wenn Sie diesen Effekt auf einen Knoten anwenden, wird innerhalb der Kanten des Knotens ein Schatten erstellt. Die benannte Klasse InnerShadow des Pakets javafx.scene.effect repräsentiert den inneren Schatteneffekt. |
15 | Beleuchtung Der Lichteffekt wird verwendet, um ein Licht von einer Lichtquelle zu simulieren. Es gibt nämlich verschiedene Arten von Lichtquellenpoint, distant und spot. Die benannte Klasse Lighting des Pakets javafx.scene.effect repräsentiert den Lichteffekt. |
16 | Light.Distant Beim Anwenden dieses Effekts auf einen Knoten wird ein Licht darauf simuliert, als würde es von einer entfernten Lichtquelle erzeugt. Distant Light Source- Eine Quelle, die sich weit vom Knoten entfernt befindet. Hier wird das Licht von der Quelle in eine Richtung gedämpft. Die benannte Klasse Light.Distant des Pakets javafx.scene.effect repräsentiert die entfernte Lichtquelle. |
17 | Lichtfleck Beim Anwenden dieses Effekts auf einen Knoten wird ein Licht darauf simuliert, als würde es von einem Punktlicht erzeugt. Spot light Source- Das Licht dieser Quelle wird in alle Richtungen gedämpft. Die Intensität des Lichts hängt von der Entfernung des Objekts von der Quelle ab. Die benannte Klasse Light.Spot des Pakets javafx.scene.effect repräsentiert die entfernte Lichtquelle. |
18 | Point.Spot Beim Anwenden dieses Effekts auf einen Knoten wird ein Licht darauf simuliert, als würde es von einer Punktlichtquelle erzeugt. Point Light Source- Das Licht dieser Quelle wird von einem einzigen Punkt aus in alle Richtungen gedämpft. Die Intensität des Lichts hängt von der Entfernung des Objekts von der Quelle ab. Die benannte Klasse Point.Spot des Pakets javafx.scene.effect repräsentiert das Punktlicht. |
Transformation bedeutet, einige Grafiken durch Anwenden von Regeln in etwas anderes zu verwandeln. Wir können verschiedene Arten von Transformationen haben, wie zTranslation, Scaling Up or Down, Rotation, Shearing, usw.
Mit JavaFX können Sie Transformationen auf Knoten wie Rotation, Skalierung und Translation anwenden. Alle diese Transformationen werden durch verschiedene Klassen dargestellt und gehören zum Paketjavafx.scene.transform.
S.No. | Transformation & Beschreibung |
---|---|
1 | Drehung Bei der Drehung drehen wir das Objekt in einem bestimmten Winkel θ (theta) von seinem Ursprung. |
2 | Skalierung Um die Größe eines Objekts zu ändern, wird die Skalierungstransformation verwendet. |
3 | Übersetzung Verschiebt ein Objekt an eine andere Position auf dem Bildschirm. |
4 | Scheren Eine Transformation, die die Form eines Objekts neigt, wird als Schertransformation bezeichnet. |
Mehrere Transformationen
Sie können auch mehrere Transformationen auf Knoten in JavaFX anwenden. Das folgende Programm ist ein Beispiel für die AusführungRotation, Scaling und Translation Transformationen auf einem Rechteck gleichzeitig.
Speichern Sie diesen Code in einer Datei mit dem Namen -
MultipleTransformationsExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class MultipleTransformationsExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Rectangle
Rectangle rectangle = new Rectangle(50, 50, 100, 75);
//Setting the color of the rectangle
rectangle.setFill(Color.BURLYWOOD);
//Setting the stroke color of the rectangle
rectangle.setStroke(Color.BLACK);
//creating the rotation transformation
Rotate rotate = new Rotate();
//Setting the angle for the rotation
rotate.setAngle(20);
//Setting pivot points for the rotation
rotate.setPivotX(150);
rotate.setPivotY(225);
//Creating the scale transformation
Scale scale = new Scale();
//Setting the dimensions for the transformation
scale.setX(1.5);
scale.setY(1.5);
//Setting the pivot point for the transformation
scale.setPivotX(300);
scale.setPivotY(135);
//Creating the translation transformation
Translate translate = new Translate();
//Setting the X,Y,Z coordinates to apply the translation
translate.setX(250);
translate.setY(0);
translate.setZ(0);
//Adding all the transformations to the rectangle
rectangle.getTransforms().addAll(rotate, scale, translate);
//Creating a Group object
Group root = new Group(rectangle);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Multiple transformations");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac MultipleTransformationsExample.java
java MultipleTransformationsExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Transformationen an 3D-Objekten
Sie können Transformationen auch auf 3D-Objekte anwenden. Es folgt ein Beispiel, das eine dreidimensionale Box dreht und übersetzt.
Speichern Sie diesen Code in einer Datei mit dem Namen RotationExample3D.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class RotationExample3D extends Application {
@Override
public void start(Stage stage) {
//Drawing a Box
Box box = new Box();
//Setting the properties of the Box
box.setWidth(150.0);
box.setHeight(150.0);
box.setDepth(150.0);
//Creating the translation transformation
Translate translate = new Translate();
translate.setX(400);
translate.setY(150);
translate.setZ(25);
Rotate rxBox = new Rotate(0, 0, 0, 0, Rotate.X_AXIS);
Rotate ryBox = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
Rotate rzBox = new Rotate(0, 0, 0, 0, Rotate.Z_AXIS);
rxBox.setAngle(30);
ryBox.setAngle(50);
rzBox.setAngle(30);
box.getTransforms().addAll(translate,rxBox, ryBox, rzBox);
//Creating a Group object
Group root = new Group(box);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing a cylinder");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac RotationExample3D.java
java RotationExample3D
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Im Allgemeinen bedeutet das Animieren eines Objekts, dass durch schnelle Anzeige eine Illusion seiner Bewegung erzeugt wird. In JavaFX kann ein Knoten animiert werden, indem seine Eigenschaft im Laufe der Zeit geändert wird. JavaFX bietet ein Paket mit dem Namenjavafx.animation. Dieses Paket enthält Klassen, mit denen die Knoten animiert werden. Animation ist die Basisklasse all dieser Klassen.
Mit JavaFX können Sie Animationen (Übergänge) wie z Fade Transition, Fill Transition, Rotate Transition, Scale Transition, Stroke Transition, Translate Transition, Path Transition, Sequential Transition, Pause Transition, Parallel Transition, usw.
Alle diese Übergänge werden durch einzelne Klassen im Paket dargestellt javafx.animation.
Um eine bestimmte Animation auf einen Knoten anzuwenden, müssen Sie die folgenden Schritte ausführen:
Erstellen Sie einen erforderlichen Knoten mit der entsprechenden Klasse.
Instanziieren Sie die jeweilige Übergangsklasse (Animation), die angewendet werden soll
Legen Sie die Eigenschaften des Übergangs und fest
Spielen Sie zum Schluss den Übergang mit dem play() Methode der Animation Klasse.
In diesem Kapitel werden Beispiele für grundlegende Übergänge (Rotation, Skalierung, Übersetzung) erläutert.
Übergang drehen
Das folgende Programm demonstriert Rotate Transition in JavaFX. Speichern Sie diesen Code in einer Datei mit dem NamenRotateTransitionExample.java.
import javafx.animation.RotateTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;
import javafx.util.Duration;
public class RotateTransitionExample extends Application {
@Override
public void start(Stage stage) {
//Creating a hexagon
Polygon hexagon = new Polygon();
//Adding coordinates to the hexagon
hexagon.getPoints().addAll(new Double[]{
200.0, 50.0,
400.0, 50.0,
450.0, 150.0,
400.0, 250.0,
200.0, 250.0,
150.0, 150.0,
});
//Setting the fill color for the hexagon
hexagon.setFill(Color.BLUE);
//Creating a rotate transition
RotateTransition rotateTransition = new RotateTransition();
//Setting the duration for the transition
rotateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
rotateTransition.setNode(hexagon);
//Setting the angle of the rotation
rotateTransition.setByAngle(360);
//Setting the cycle count for the transition
rotateTransition.setCycleCount(50);
//Setting auto reverse value to false
rotateTransition.setAutoReverse(false);
//Playing the animation
rotateTransition.play();
//Creating a Group object
Group root = new Group(hexagon);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Rotate transition example ");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac RotateTransitionExample.java
java RotateTransitionExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Skalenübergang
Das folgende Programm demonstriert Scale Transition in JavaFX. Speichern Sie diesen Code in einer Datei mit dem NamenScaleTransitionExample.java.
import javafx.animation.ScaleTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class ScaleTransitionExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the position of the circle
circle.setCenterX(300.0f);
circle.setCenterY(135.0f);
//Setting the radius of the circle
circle.setRadius(50.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
//Creating scale Transition
ScaleTransition scaleTransition = new ScaleTransition();
//Setting the duration for the transition
scaleTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
scaleTransition.setNode(circle);
//Setting the dimensions for scaling
scaleTransition.setByY(1.5);
scaleTransition.setByX(1.5);
//Setting the cycle count for the translation
scaleTransition.setCycleCount(50);
//Setting auto reverse value to true
scaleTransition.setAutoReverse(false);
//Playing the animation
scaleTransition.play();
//Creating a Group object
Group root = new Group(circle);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Scale transition example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac ScaleTransitionExample.java
java ScaleTransitionExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Übergang übersetzen
Das folgende Programm demonstriert den Übersetzungsübergang in JavaFX. Speichern Sie diesen Code in einer Datei mit dem NamenTranslateTransitionExample.java.
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class TranslateTransitionExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the position of the circle
circle.setCenterX(150.0f);
circle.setCenterY(135.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
//Creating Translate Transition
TranslateTransition translateTransition = new TranslateTransition();
//Setting the duration of the transition
translateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
translateTransition.setNode(circle);
//Setting the value of the transition along the x axis.
translateTransition.setByX(300);
//Setting the cycle count for the transition
translateTransition.setCycleCount(50);
//Setting auto reverse value to false
translateTransition.setAutoReverse(false);
//Playing the animation
translateTransition.play();
//Creating a Group object
Group root = new Group(circle);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Translate transition example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac TranslateTransitionExample.java
java TranslateTransitionExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Darüber hinaus bietet JavaFX Klassen, um mehr Übergänge auf Knoten anzuwenden. Im Folgenden sind die anderen Arten von Übergängen aufgeführt, die von JavaFX unterstützt werden.
Übergänge, die sich auf die Attribute der Knoten Fade, Fill, Stroke auswirken
Übergang, der mehr als einen grundlegenden Übergang umfasst: Sequentiell, Parallel, Pause
Übergang, der das Objekt entlang des angegebenen Pfads übersetzt. Pfadübergang
Um Farben auf eine Anwendung anzuwenden, bietet JavaFX verschiedene Klassen im Paket javafx.scene.paintPaket. Dieses Paket enthält eine abstrakte Klasse namens Paint und ist die Basisklasse aller Klassen, die zum Anwenden von Farben verwendet werden.
Mit diesen Klassen können Sie Farben in den folgenden Mustern anwenden:
Uniform - In diesem Muster wird die Farbe gleichmäßig im gesamten Knoten angewendet.
Image Pattern - Auf diese Weise können Sie den Bereich des Knotens mit einem Bildmuster füllen.
Gradient- In diesem Muster variiert die auf den Knoten angewendete Farbe von einem Punkt zum anderen. Es hat nämlich zwei Arten von VerläufenLinear Gradient und Radial Gradient.
Alle Knotenklassen, auf die Sie Farben anwenden können, z Shape, Text (einschließlich Szene), haben Methoden benannt setFill() und setStroke(). Diese helfen dabei, die Farbwerte der Knoten bzw. ihre Striche festzulegen.
Diese Methoden akzeptieren ein Objekt vom Typ Paint. Um einen dieser Bildtypen zu erstellen, müssen Sie diese Klassen instanziieren und das Objekt als Parameter an diese Methoden übergeben.
Anwenden von Farbe auf die Knoten
Um ein einheitliches Farbmuster für die Knoten festzulegen, müssen Sie ein Objekt der Klassenfarbe an die übergeben setFill(), setStroke() Methoden wie folgt -
//Setting color to the text
Color color = new Color.BEIGE
text.setFill(color);
//Setting color to the stroke
Color color = new Color.DARKSLATEBLUE
circle.setStroke(color);
Im obigen Codeblock verwenden wir die statischen Variablen der Farbklasse, um ein Farbobjekt zu erstellen.
Auf die gleiche Weise können Sie auch die RGB-Werte oder den HSB-Standard für Farb- oder Web-Hash-Codes von Farben verwenden, wie unten gezeigt -
//creating color object by passing RGB values
Color c = Color.rgb(0,0,255);
//creating color object by passing HSB values
Color c = Color.hsb(270,1.0,1.0);
//creating color object by passing the hash code for web
Color c = Color.web("0x0000FF",1.0);
Beispiel
Das folgende Beispiel zeigt, wie Farbe auf die Knoten in JavaFX angewendet wird. Hier erstellen wir einen Kreis und Textknoten und wenden Farben darauf an.
Speichern Sie diesen Code in einer Datei mit dem Namen ColorExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class ColorExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Setting color to the circle
circle.setFill(Color.DARKRED);
//Setting the stroke width
circle.setStrokeWidth(3);
//Setting color to the stroke
circle.setStroke(Color.DARKSLATEBLUE);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 50));
//Setting the position of the text
text.setX(155);
text.setY(50);
//Setting color to the text
text.setFill(Color.BEIGE);
text.setStrokeWidth(2);
text.setStroke(Color.DARKSLATEBLUE);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Color Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac ColorExample.java
java ColorExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Anwenden eines Bildmusters auf die Knoten
Instanziieren Sie das, um ein Bildmuster auf die Knoten anzuwenden ImagePattern Klasse und übergeben Sie sein Objekt an die setFill(), setStroke() Methoden.
Der Konstruktor dieser Klasse akzeptiert sechs Parameter, nämlich -
Image - Das Objekt des Bildes, mit dem Sie das Muster erstellen möchten.
x and y - Doppelte Variablen, die die (x, y) Ursprungskoordinaten des Ankerrechtecks darstellen.
height and width - Doppelte Variablen, die die Höhe und Breite des Bildes darstellen, mit dem ein Muster erstellt wird.
isProportional- Dies ist eine boolesche Variable. Wenn Sie diese Eigenschaft auf true setzen, werden die Start- und Endpositionen proportional gesetzt.
ImagePattern radialGradient = new ImagePattern(dots, 20, 20, 40, 40, false);
Beispiel
Das folgende Beispiel zeigt, wie Sie ein Bildmuster auf die Knoten in JavaFX anwenden. Hier erstellen wir einen Kreis und einen Textknoten und wenden ein Bildmuster auf sie an.
Speichern Sie diesen Code in einer Datei mit Namen ImagePatternExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.ImagePattern;
import javafx.scene.paint.Stop;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class ImagePatternExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 50));
//Setting the position of the text
text.setX(155);
text.setY(50);
//Setting the image pattern
String link = "https://encrypted-tbn1.gstatic.com"
+ "/images?q=tbn:ANd9GcRQub4GvEezKMsiIf67U"
+ "rOxSzQuQ9zl5ysnjRn87VOC8tAdgmAJjcwZ2qM";
Image image = new Image(link);
ImagePattern radialGradient = new ImagePattern(image, 20, 20, 40, 40, false);
//Setting the linear gradient to the circle and text
circle.setFill(radialGradient);
text.setFill(radialGradient);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Image pattern Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac ImagePatternExample.java
java ImagePatternExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Anwenden eines linearen Verlaufsmusters
Instanziieren Sie das, um ein lineares Verlaufsmuster auf die Knoten anzuwenden LinearGradient Klasse und übergeben Sie sein Objekt an die setFill(), setStroke() Methoden.
Der Konstruktor dieser Klasse akzeptiert fünf Parameter, nämlich -
startX, startY - Diese Doppeleigenschaften repräsentieren die x- und y-Koordinaten des Startpunkts des Gradienten.
endX, endY - Diese Doppeleigenschaften repräsentieren die x- und y-Koordinaten des Endpunkts des Verlaufs.
cycleMethod - Dieses Argument definiert, wie die Bereiche außerhalb der Farbverlaufsgrenzen, die durch den Start- und Endpunkt definiert sind, gefüllt werden sollen.
proportional- Dies ist eine boolesche Variable. beim Setzen dieser Eigenschaft auftruewerden die Start- und Endpositionen auf einen Anteil eingestellt.
Stops - Dieses Argument definiert die Farbstopppunkte entlang der Verlaufslinie.
//Setting the linear gradient
Stop[] stops = new Stop[] {
new Stop(0, Color.DARKSLATEBLUE),
new Stop(1, Color.DARKRED)
};
LinearGradient linearGradient =
new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);
Beispiel
Das folgende Beispiel zeigt, wie ein Verlaufsmuster auf die Knoten in JavaFX angewendet wird. Hier erstellen wir einen Kreis und einen Textknoten und wenden ein lineares Verlaufsmuster auf sie an.
Speichern Sie diesen Code in einer Datei mit Namen LinearGradientExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class LinearGradientExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 55));
//Setting the position of the text
text.setX(140);
text.setY(50);
//Setting the linear gradient
Stop[] stops = new Stop[] {
new Stop(0, Color.DARKSLATEBLUE),
new Stop(1, Color.DARKRED)
};
LinearGradient linearGradient =
new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);
//Setting the linear gradient to the circle and text
circle.setFill(linearGradient);
text.setFill(linearGradient);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Linear Gradient Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac LinearGradientExample.java
java LinearGradientExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Anwenden eines radialen Gradientenmusters
Instanziieren Sie das, um ein radiales Verlaufsmuster auf die Knoten anzuwenden GradientPattern Klasse und übergeben Sie sein Objekt an die setFill(), setStroke() Methoden.
Der Konstruktor dieser Klasse akzeptiert einige Parameter, von denen einige -
startX, startY - Diese Doppeleigenschaften repräsentieren die x- und y-Koordinaten des Startpunkts des Gradienten.
endX, endY - Diese Doppeleigenschaften repräsentieren die x- und y-Koordinaten des Endpunkts des Verlaufs.
cycleMethod - Dieses Argument definiert, wie die Bereiche außerhalb der Farbverlaufsgrenzen durch die Start- und Endpunkte definiert werden und wie sie gefüllt werden sollen.
proportional- Dies ist eine boolesche Variable. beim Setzen dieser Eigenschaft auftrue Die Start- und Endpositionen sind proportional eingestellt.
Stops - Dieses Argument definiert die Farbstopppunkte entlang der Verlaufslinie.
//Setting the radial gradient
Stop[] stops = new Stop[] {
new Stop(0.0, Color.WHITE),
new Stop(0.3, Color.RED),
new Stop(1.0, Color.DARKRED)
};
RadialGradient radialGradient =
new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);
Beispiel
Das folgende Beispiel zeigt, wie ein radiales Gradientenmuster auf die Knoten in JavaFX angewendet wird. Hier erstellen wir einen Kreis und einen Textknoten und wenden darauf ein Verlaufsmuster an.
Speichern Sie diesen Code in einer Datei mit dem Namen RadialGradientExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class RadialGradientExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 50));
//Setting the position of the text
text.setX(155);
text.setY(50);
//Setting the radial gradient
Stop[] stops = new Stop[] {
new Stop(0.0, Color.WHITE),
new Stop(0.3, Color.RED),
new Stop(1.0, Color.DARKRED)
};
RadialGradient radialGradient =
new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);
//Setting the radial gradient to the circle and text
circle.setFill(radialGradient);
text.setFill(radialGradient);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Radial Gradient Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac RadialGradientExample.java
java RadialGradientExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Sie können Bilder mit den von JavaFX im Paket bereitgestellten Klassen laden und ändern javafx.scene.image. JavaFX unterstützt die Bildformate wieBmp, Gif, Jpeg, Png.
In diesem Kapitel erfahren Sie, wie Sie Bilder in JavaFX laden, ein Bild in mehreren Ansichten projizieren und die Pixel eines Bildes ändern.
Laden eines Bildes
Sie können ein Bild in JavaFX laden, indem Sie die benannte Klasse instanziieren Image des Pakets javafx.scene.image.
An den Konstruktor der Klasse müssen Sie eine der folgenden Optionen übergeben:
Ein InputStream Objekt des zu ladenden Bildes oder,
Eine Zeichenfolgenvariable, die die URL für das Bild enthält.
//Passing FileInputStream object as a parameter
FileInputStream inputstream = new FileInputStream("C:\\images\\image.jpg");
Image image = new Image(inputstream);
//Loading image from URL
//Image image = new Image(new FileInputStream("url for the image));
Nach dem Laden des Bildes können Sie die Ansicht für das Bild festlegen, indem Sie das instanziieren ImageView Klasse und Übergabe des Bildes an seinen Konstruktor wie folgt -
ImageView imageView = new ImageView(image);
Beispiel
Das folgende Beispiel zeigt, wie ein Bild in JavaFX geladen und die Ansicht festgelegt wird.
Speichern Sie diesen Code in einer Datei mit dem Namen ImageExample.java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class ImageExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("path of the image"));
//Setting the image view
ImageView imageView = new ImageView(image);
//Setting the position of the image
imageView.setX(50);
imageView.setY(25);
//setting the fit height and width of the image view
imageView.setFitHeight(455);
imageView.setFitWidth(500);
//Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Loading an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac ImageExample.java
java ImageExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Mehrere Ansichten eines Bildes
Sie können auch mehrere Ansichten für ein Bild in derselben Szene festlegen. Das folgende Programm zeigt anhand eines Beispiels, wie Sie verschiedene Ansichten für ein Bild in einer Szene in JavaFX festlegen.
Speichern Sie diesen Code in einer Datei mit dem Namen MultipleViews.java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class MultipleViews extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("file path"));
//Setting the image view 1
ImageView imageView1 = new ImageView(image);
//Setting the position of the image
imageView1.setX(50);
imageView1.setY(25);
//setting the fit height and width of the image view
imageView1.setFitHeight(300);
imageView1.setFitWidth(250);
//Setting the preserve ratio of the image view
imageView1.setPreserveRatio(true);
//Setting the image view 2
ImageView imageView2 = new ImageView(image);
//Setting the position of the image
imageView2.setX(350);
imageView2.setY(25);
//setting the fit height and width of the image view
imageView2.setFitHeight(150);
imageView2.setFitWidth(250);
//Setting the preserve ratio of the image view
imageView2.setPreserveRatio(true);
//Setting the image view 3
ImageView imageView3 = new ImageView(image);
//Setting the position of the image
imageView3.setX(350);
imageView3.setY(200);
//setting the fit height and width of the image view
imageView3.setFitHeight(100);
imageView3.setFitWidth(100);
//Setting the preserve ratio of the image view
imageView3.setPreserveRatio(true);
//Creating a Group object
Group root = new Group(imageView1, imageView2, imageView3);
//Creating a scene object
Scene scene = new Scene(root, 600, 400);
//Setting title to the Stage
stage.setTitle("Multiple views of an image");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac MultipleViews.java
java MultipleViews
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
Pixel schreiben
JavaFX bietet benannte Klassen PixelReader und PixelWriterKlassen zum Lesen und Schreiben von Pixeln eines Bildes. DasWritableImage Klasse wird verwendet, um ein beschreibbares Bild zu erstellen.
Das folgende Beispiel zeigt, wie Pixel eines Bildes gelesen und geschrieben werden. Hier lesen wir den Farbwert eines Bildes und machen es dunkler.
Speichern Sie diesen Code in einer Datei mit dem Namen WritingPixelsExample.java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class WritingPixelsExample extends Application {
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("C:\\images\\logo.jpg"));
int width = (int)image.getWidth();
int height = (int)image.getHeight();
//Creating a writable image
WritableImage wImage = new WritableImage(width, height);
//Reading color from the loaded image
PixelReader pixelReader = image.getPixelReader();
//getting the pixel writer
PixelWriter writer = wImage.getPixelWriter();
//Reading the color of the image
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
//Retrieving the color of the pixel of the loaded image
Color color = pixelReader.getColor(x, y);
//Setting the color to the writable image
writer.setColor(x, y, color.darker());
}
}
//Setting the view for the writable image
ImageView imageView = new ImageView(wImage);
//Creating a Group object
Group root = new Group(imageView);
//Creating a scene object
Scene scene = new Scene(root, 600, 500);
//Setting title to the Stage
stage.setTitle("Writing pixels ");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac WritingPixelsExample.java
java WritingPixelsExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie folgt:
In den vorherigen Kapiteln haben wir gesehen, wie 2D-Formen auf einer XY-Ebene gezeichnet werden. Zusätzlich zu diesen 2D-Formen können wir mit JavaFX auch mehrere andere 3D-Formen zeichnen.
3D-Form
Im Allgemeinen ist eine 3D-Form eine geometrische Figur, die in der XYZ-Ebene gezeichnet werden kann. Dazu gehören aCylinder, Sphere und ein Box.
Jede der oben genannten 3D-Formen wird durch eine Klasse dargestellt, und alle diese Klassen gehören zum Paket javafx.scene.shape. Die benannte KlasseShape3D ist die Basisklasse aller dreidimensionalen Formen in JavaFX.
Erstellen einer 3D-Form
Um eine dreidimensionale Form zu erstellen, müssen Sie -
Instanziieren Sie die jeweilige Klasse der gewünschten 3D-Form.
Legen Sie die Eigenschaften der 3D-Form fest.
Fügen Sie der Gruppe das 3D-Formobjekt hinzu.
Instanziieren der jeweiligen Klasse
Um eine dreidimensionale Form zu erstellen, müssen Sie zunächst die jeweilige Klasse instanziieren. Wenn Sie beispielsweise eine 3D-Box erstellen möchten, müssen Sie die Klasse Box wie folgt instanziieren:
Box box = new Box();
Festlegen der Eigenschaften der Form
Nach dem Instanziieren der Klasse müssen Sie die Eigenschaften für die Form mithilfe der Setter-Methoden festlegen.
Um beispielsweise eine 3D-Box zu zeichnen, müssen Sie deren Breite, Höhe und Tiefe übergeben. Sie können diese Werte mit den jeweiligen Setter-Methoden wie folgt angeben:
//Setting the properties of the Box
box.setWidth(200.0);
box.setHeight(400.0);
box.setDepth(200.0);
Hinzufügen des Formobjekts zur Gruppe
Schließlich müssen Sie das Objekt der Form zur Gruppe hinzufügen, indem Sie es wie unten gezeigt als Parameter des Konstruktors übergeben.
//Creating a Group object
Group root = new Group(box);
In der folgenden Tabelle finden Sie eine Liste der verschiedenen von JavaFX bereitgestellten 3D-Formen.
S.No. | Form & Beschreibung |
---|---|
1 | Box Ein Quader ist eine dreidimensionale Form mit a length (Tiefe), width, und ein height. In JavaFX wird eine dreidimensionale Box durch eine Klasse mit dem Namen dargestellt Box. Diese Klasse gehört zum Paketjavafx.scene.shape. Durch Instanziieren dieser Klasse können Sie einen Box-Knoten in JavaFX erstellen. Diese Klasse hat 3 Eigenschaften des doppelten Datentyps, nämlich -
|
2 | Zylinder Ein Zylinder ist ein geschlossener Festkörper mit zwei parallelen (meist kreisförmigen) Basen, die durch eine gekrümmte Oberfläche verbunden sind. Es wird durch zwei Parameter beschrieben, nämlich die radius seiner kreisförmigen Basis und der height des Zylinders. In JavaFX wird ein Zylinder durch eine Klasse mit dem Namen dargestellt Cylinder. Diese Klasse gehört zum Paketjavafx.scene.shape. Durch Instanziieren dieser Klasse können Sie in JavaFX einen Zylinderknoten erstellen. Diese Klasse hat 2 Eigenschaften des doppelten Datentyps, nämlich -
|
3 | Kugel Eine Kugel ist definiert als die Menge von Punkten, die sich alle im gleichen Abstand r von einem bestimmten Punkt in einem 3D-Raum befinden. Dieser Abstand r ist der Radius der Kugel und der gegebene Punkt ist der Mittelpunkt der Kugel. In JavaFX wird eine Kugel durch eine Klasse mit dem Namen dargestellt Sphere. Diese Klasse gehört zum Paketjavafx.scene.shape. Durch Instanziieren dieser Klasse können Sie in JavaFX einen Kugelknoten erstellen. Diese Klasse hat eine Eigenschaft namens radiusvom doppelten Datentyp. Es repräsentiert den Radius einer Kugel. |
Eigenschaften von 3D-Objekten
Für alle dreidimensionalen Objekte können Sie verschiedene Eigenschaften festlegen, z. B. Keulfläche, Zeichenmodus, Material.
Im folgenden Abschnitt werden die Eigenschaften von 3D-Objekten erläutert.
Keulgesicht
Im Allgemeinen bedeutet Keulen das Entfernen von nicht richtig ausgerichteten Teilen einer Form (die im Ansichtsbereich nicht sichtbar sind).
Die Cull Face-Eigenschaft ist vom Typ CullFaceund es repräsentiert das Cull Face einer 3D-Form. Mit der Methode können Sie die Keulfläche einer Form festlegensetCullFace() wie unten gezeigt -
box.setCullFace(CullFace.NONE);
Der Strich-Typ einer Form kann sein -
None - Es wird kein Keulen durchgeführt (CullFace.NONE).
Front- Alle nach vorne gerichteten Polygone werden ausgesondert. (CullFace.FRONT).
Back- Alle nach hinten gerichteten Polygone werden ausgesondert. (StrokeType.BACK).
Standardmäßig ist die Keulfläche einer dreidimensionalen Form Zurück.
Beispiel
Das folgende Programm ist ein Beispiel, das verschiedene Keulungsflächen der Kugel zeigt. Speichern Sie diesen Code in einer Datei mit dem NamenSphereCullFace.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.stage.Stage;
import javafx.scene.shape.Sphere;
public class SphereCullFace extends Application {
@Override
public void start(Stage stage) {
//Drawing Sphere1
Sphere sphere1 = new Sphere();
//Setting the radius of the Sphere
sphere1.setRadius(50.0);
//Setting the position of the sphere
sphere1.setTranslateX(100);
sphere1.setTranslateY(150);
//setting the cull face of the sphere to front
sphere1.setCullFace(CullFace.FRONT);
//Drawing Sphere2
Sphere sphere2 = new Sphere();
//Setting the radius of the Sphere
sphere2.setRadius(50.0);
//Setting the position of the sphere
sphere2.setTranslateX(300);
sphere2.setTranslateY(150);
//Setting the cull face of the sphere to back
sphere2.setCullFace(CullFace.BACK);
//Drawing Sphere3
Sphere sphere3 = new Sphere();
//Setting the radius of the Sphere
sphere3.setRadius(50.0);
//Setting the position of the sphere
sphere3.setTranslateX(500);
sphere3.setTranslateY(150);
//Setting the cull face of the sphere to none
sphere2.setCullFace(CullFace.NONE);
//Creating a Group object
Group root = new Group(sphere1, sphere2, sphere3);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing a Sphere");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac SphereCullFace.java
java SphereCullFace
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem drei Kugeln mit Keulungsflächenwerten angezeigt werden FRONT, BACK und NONE jeweils wie folgt -
Zeichenmodi
Es ist die Eigenschaft vom Typ DrawModeund es stellt den Zeichenmodus dar, der zum Zeichnen der aktuellen 3D-Form verwendet wird. Sie können den Zeichenmodus zum Zeichnen einer 3D-Form mit der Methode setDrawMode () wie folgt auswählen:
box.setDrawMode(DrawMode.FILL);
In JavaFX können Sie zwei Zeichenmodi zum Zeichnen einer 3D-Form auswählen:
Fill - Dieser Modus zeichnet und füllt eine 2D-Form (DrawMode.FILL).
Line - Dieser Modus zeichnet eine 3D-Form mithilfe von Linien (DrawMode.LINE).
Standardmäßig ist der Zeichenmodus einer 3D-dimensionalen Form gefüllt.
Beispiel
Das folgende Programm ist ein Beispiel, das verschiedene Zeichenmodi einer 3D-Box demonstriert. Speichern Sie diesen Code in einer Datei mit dem NamenBoxDrawMode.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.stage.Stage;
public class BoxDrawMode extends Application {
@Override
public void start(Stage stage) {
//Drawing a Box
Box box1 = new Box();
//Setting the properties of the Box
box1.setWidth(100.0);
box1.setHeight(100.0);
box1.setDepth(100.0);
//Setting the position of the box
box1.setTranslateX(200);
box1.setTranslateY(150);
box1.setTranslateZ(0);
//Setting the drawing mode of the box
box1.setDrawMode(DrawMode.LINE);
//Drawing a Box
Box box2 = new Box();
//Setting the properties of the Box
box2.setWidth(100.0);
box2.setHeight(100.0);
box2.setDepth(100.0);
//Setting the position of the box
box2.setTranslateX(450); //450
box2.setTranslateY(150);//150
box2.setTranslateZ(300);
//Setting the drawing mode of the box
box2.setDrawMode(DrawMode.FILL);
//Creating a Group object
Group root = new Group(box1, box2);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(0);
scene.setCamera(camera);
//Setting title to the Stage
stage.setTitle("Drawing a Box");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac BoxDrawMode.java
java BoxDrawMode
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem zwei Felder mit den Zeichenmoduswerten LINE bzw. FILL wie folgt angezeigt werden:
Material
Die Eigenschaft cull Face ist vom Typ Materialund es wird verwendet, um die Oberfläche des Materials einer 3D-Form auszuwählen. Mit der Methode können Sie das Material einer 3D-Form festlegensetCullFace() wie folgt -
cylinder.setMaterial(material);
Wie oben für diese Methode erwähnt, müssen Sie ein Objekt vom Typ Material übergeben. DasPhongMaterial Klasse des Pakets javafx.scene.paintist eine Unterklasse dieser Klasse und bietet 7 Eigenschaften, die ein Phong-schattiertes Material darstellen. Sie können alle diese Arten von Materialien mit den Setter-Methoden dieser Eigenschaften auf die Oberfläche einer 3D-Form anwenden.
Im Folgenden sind die Materialien aufgeführt, die in JavaFX verfügbar sind:
bumpMap - Dies stellt eine normale Karte dar, die als RGB-Bild gespeichert ist.
diffuseMap - Dies ist eine diffuse Karte.
selfIlluminationMap - Dies ist eine Selbstbeleuchtungskarte dieses PhongMaterials.
specularMap - Dies ist eine spiegelnde Karte dieses PhongMaterials.
diffuseColor - Dies ist eine diffuse Farbe dieses PhongMaterials.
specularColor - Dies ist eine Spiegelfarbe dieses PhongMaterials.
specularPower - Dies repräsentiert eine spiegelnde Kraft dieses PhongMaterials.
Standardmäßig ist das Material einer dreidimensionalen Form ein PhongMaterial mit einer diffusen hellgrauen Farbe.
Beispiel
Es folgt ein Beispiel, in dem verschiedene Materialien auf dem Zylinder angezeigt werden. Speichern Sie diesen Code in einer Datei mit dem NamenCylinderMaterials.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.stage.Stage;
public class CylinderMaterials extends Application {
@Override
public void start(Stage stage) {
//Drawing Cylinder1
Cylinder cylinder1 = new Cylinder();
//Setting the properties of the Cylinder
cylinder1.setHeight(130.0f);
cylinder1.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder1.setTranslateX(100);
cylinder1.setTranslateY(75);
//Preparing the phong material of type bump map
PhongMaterial material1 = new PhongMaterial();
material1.setBumpMap(new Image
("http://www.tutorialspoint.com/images/tplogo.gif"));
//Setting the bump map material to Cylinder1
cylinder1.setMaterial(material1);
//Drawing Cylinder2
Cylinder cylinder2 = new Cylinder();
//Setting the properties of the Cylinder
cylinder2.setHeight(130.0f);
cylinder2.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder2.setTranslateX(200);
cylinder2.setTranslateY(75);
//Preparing the phong material of type diffuse map
PhongMaterial material2 = new PhongMaterial();
material2.setDiffuseMap(new Image
("http://www.tutorialspoint.com/images/tp-logo.gif"));
//Setting the diffuse map material to Cylinder2
cylinder2.setMaterial(material2);
//Drawing Cylinder3
Cylinder cylinder3 = new Cylinder();
//Setting the properties of the Cylinder
cylinder3.setHeight(130.0f);
cylinder3.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder3.setTranslateX(300);
cylinder3.setTranslateY(75);
//Preparing the phong material of type Self Illumination Map
PhongMaterial material3 = new PhongMaterial();
material3.setSelfIlluminationMap(new Image
("http://www.tutorialspoint.com/images/tp-logo.gif"));
//Setting the Self Illumination Map material to Cylinder3
cylinder3.setMaterial(material3);
//Drawing Cylinder4
Cylinder cylinder4 = new Cylinder();
//Setting the properties of the Cylinder
cylinder4.setHeight(130.0f);
cylinder4.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder4.setTranslateX(400);
cylinder4.setTranslateY(75);
//Preparing the phong material of type Specular Map
PhongMaterial material4 = new PhongMaterial();
material4.setSpecularMap(new Image
("http://www.tutorialspoint.com/images/tp-logo.gif"));
//Setting the Specular Map material to Cylinder4
cylinder4.setMaterial(material4);
//Drawing Cylinder5
Cylinder cylinder5 = new Cylinder();
//Setting the properties of the Cylinder
cylinder5.setHeight(130.0f);
cylinder5.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder5.setTranslateX(100);
cylinder5.setTranslateY(300);
//Preparing the phong material of type diffuse color
PhongMaterial material5 = new PhongMaterial();
material5.setDiffuseColor(Color.BLANCHEDALMOND);
//Setting the diffuse color material to Cylinder5
cylinder5.setMaterial(material5);
//Drawing Cylinder6
Cylinder cylinder6 = new Cylinder();
//Setting the properties of the Cylinder
cylinder6.setHeight(130.0f);
cylinder6.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder6.setTranslateX(200);
cylinder6.setTranslateY(300);
//Preparing the phong material of type specular color
PhongMaterial material6 = new PhongMaterial();
//setting the specular color map to the material
material6.setSpecularColor(Color.BLANCHEDALMOND);
//Setting the specular color material to Cylinder6
cylinder6.setMaterial(material6);
//Drawing Cylinder7
Cylinder cylinder7 = new Cylinder();
//Setting the properties of the Cylinder
cylinder7.setHeight(130.0f);
cylinder7.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder7.setTranslateX(300);
cylinder7.setTranslateY(300);
//Preparing the phong material of type Specular Power
PhongMaterial material7 = new PhongMaterial();
material7.setSpecularPower(0.1);
//Setting the Specular Power material to the Cylinder
cylinder7.setMaterial(material7);
//Creating a Group object
Group root = new Group(cylinder1 ,cylinder2, cylinder3,
cylinder4, cylinder5, cylinder6, cylinder7);
//Creating a scene object
Scene scene = new Scene(root, 600, 400);
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(-10);
scene.setCamera(camera);
//Setting title to the Stage
stage.setTitle("Drawing a cylinder");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
Javac CylinderMaterials.java
java CylinderMaterials
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem 7 Zylinder mit Materialien, Bump Map, Diffuse Map, Selbstbeleuchtungskarte, Specular Map, Diffuse Color, Specular Color (BLANCHEDALMOND) Specular Power angezeigt werden (siehe folgenden Screenshot) - -
In JavaFX können wir GUI-Anwendungen, Webanwendungen und grafische Anwendungen entwickeln. In solchen Anwendungen wird immer dann, wenn ein Benutzer mit der Anwendung (Knoten) interagiert, ein Ereignis aufgetreten.
Zum Beispiel sind das Klicken auf eine Schaltfläche, das Bewegen der Maus, das Eingeben eines Zeichens über die Tastatur, das Auswählen eines Elements aus der Liste und das Scrollen der Seite die Aktivitäten, die ein Ereignis auslösen.
Arten von Ereignissen
Die Ereignisse können grob in die folgenden zwei Kategorien eingeteilt werden:
Foreground Events- Ereignisse, die die direkte Interaktion eines Benutzers erfordern. Sie werden als Konsequenzen einer Person generiert, die mit den grafischen Komponenten in einer grafischen Benutzeroberfläche interagiert. Zum Beispiel durch Klicken auf eine Schaltfläche, Bewegen der Maus, Eingeben eines Zeichens über die Tastatur, Auswählen eines Elements aus der Liste, Scrollen der Seite usw.
Background Events- Ereignisse, die die Interaktion des Endbenutzers erfordern, werden als Hintergrundereignisse bezeichnet. Die Betriebssystemunterbrechungen, Hardware- oder Softwarefehler, Ablauf des Timers und Abschluss des Vorgangs sind Beispiele für Hintergrundereignisse.
Ereignisse in JavaFX
JavaFX bietet Unterstützung für eine Vielzahl von Ereignissen. Die benannte KlasseEvent des Pakets javafx.event ist die Basisklasse für ein Ereignis.
Eine Instanz einer ihrer Unterklassen ist ein Ereignis. JavaFX bietet eine Vielzahl von Ereignissen. Einige von ihnen sind unten aufgeführt.
Mouse Event- Dies ist ein Eingabeereignis, das auftritt, wenn eine Maus angeklickt wird. Es wird durch die genannte Klasse dargestelltMouseEvent. Es umfasst Aktionen wie Mausklick, Maus gedrückt, Maus losgelassen, Maus bewegt, Maus eingegebenes Ziel, Maus verlassenes Ziel usw.
Key Event- Dies ist ein Eingabeereignis, das den Tastenanschlag an einem Knoten angibt. Es wird durch die genannte Klasse dargestelltKeyEvent. Dieses Ereignis umfasst Aktionen wie Drücken der Taste, Loslassen der Taste und Eingeben der Taste.
Drag Event- Dies ist ein Eingabeereignis, das beim Ziehen der Maus auftritt. Es wird durch die genannte Klasse dargestelltDragEvent. Es enthält Aktionen wie eingegebenes Ziehen, fallengelassenes Ziehen, eingegebenes Ziel ziehen, verlassenes Ziel ziehen, überziehen usw.
Window Event- Dies ist ein Ereignis im Zusammenhang mit Fenstern, mit denen Aktionen angezeigt / ausgeblendet werden. Es wird durch die genannte Klasse dargestelltWindowEvent. Es enthält Aktionen wie Fenster ausblenden, Fenster angezeigt, Fenster ausgeblendet, Fenster angezeigt usw.
Handhabung des Events
Die Ereignisbehandlung ist der Mechanismus, der das Ereignis steuert und entscheidet, was passieren soll, wenn ein Ereignis auftritt. Dieser Mechanismus verfügt über den Code, der als Ereignishandler bezeichnet wird und ausgeführt wird, wenn ein Ereignis auftritt.
JavaFX bietet Handler und Filter zur Behandlung von Ereignissen. In JavaFX hat jedes Ereignis -
Target- Der Knoten, auf dem ein Ereignis aufgetreten ist. Ein Ziel kann ein Fenster, eine Szene und ein Knoten sein.
Source- Die Quelle, aus der das Ereignis generiert wird, ist die Quelle des Ereignisses. Im obigen Szenario ist die Maus die Quelle des Ereignisses.
Type- Art des aufgetretenen Ereignisses; Im Falle eines Mausereignisses - Maus gedrückt, Maus losgelassen sind die Art der Ereignisse.
Angenommen, wir haben eine Anwendung, in die Schaltflächen für Kreis, Stopp und Wiedergabe mithilfe eines Gruppenobjekts wie folgt eingefügt wurden:
Wenn Sie auf die Wiedergabetaste klicken, ist die Quelle die Maus, der Zielknoten die Wiedergabetaste und der Typ des generierten Ereignisses ist der Mausklick.
Phasen der Ereignisbehandlung in JavaFX
Jedes Mal, wenn ein Ereignis generiert wird, durchläuft JavaFX die folgenden Phasen.
Streckenbau
Immer wenn ein Ereignis generiert wird, wird die Standard- / Anfangsroute des Ereignisses durch die Erstellung eines Ereignisses bestimmt Event Dispatch chain. Es ist der Weg von der Bühne zum Quellknoten.
Es folgt die Ereignisversandkette für das Ereignis, das generiert wird, wenn wir im obigen Szenario auf die Wiedergabetaste klicken.
Ereigniserfassungsphase
Nach dem Aufbau der Ereignisversandkette löst der Stammknoten der Anwendung das Ereignis aus. Dieses Ereignis wird zu allen Knoten in der Versandkette übertragen (von oben nach unten). Wenn einer dieser Knoten eine hatfilterfür das generierte Ereignis registriert, wird es ausgeführt. Wenn keiner der Knoten in der Versandkette einen Filter für das generierte Ereignis hat, wird dieser an den Zielknoten übergeben und schließlich verarbeitet der Zielknoten das Ereignis.
Ereignisblasenphase
In der Ereignisblasenphase wird das Ereignis vom Zielknoten zum Bühnenknoten (von unten nach oben) übertragen. Wenn einer der Knoten in der Ereignisversandkette eine hathandlerfür das generierte Ereignis registriert, wird es ausgeführt. Wenn keiner dieser Knoten über Handler verfügt, die das Ereignis behandeln, erreicht das Ereignis den Stammknoten und der Vorgang wird abgeschlossen.
Ereignishandler und Filter
Ereignisfilter und -handler sind solche, die Anwendungslogik zum Verarbeiten eines Ereignisses enthalten. Ein Knoten kann sich bei mehr als einem Handler / Filter registrieren. Bei Eltern-Kind-Knoten können Sie den Eltern einen gemeinsamen Filter / Handler bereitstellen, der standardmäßig für alle untergeordneten Knoten verarbeitet wird.
Wie oben erwähnt, ist die Verarbeitung während des Ereignisses ein Filter, der ausgeführt wird, und während der Ereignisblasenphase wird ein Handler ausgeführt. Alle Handler und Filter implementieren die SchnittstelleEventHandler des Pakets javafx.event.
Ereignisfilter hinzufügen und entfernen
Um einem Knoten einen Ereignisfilter hinzuzufügen, müssen Sie diesen Filter mithilfe der Methode registrieren addEventFilter() des Node Klasse.
//Creating the mouse event handler
EventHandler<MouseEvent> eventHandler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println("Hello World");
circle.setFill(Color.DARKSLATEBLUE);
}
};
//Adding event Filter
Circle.addEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);
Auf die gleiche Weise können Sie einen Filter mit der Methode removeEventFilter () entfernen, wie unten gezeigt -
circle.removeEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);
Beispiel für die Ereignisbehandlung
Das folgende Beispiel zeigt die Ereignisbehandlung in JavaFX mithilfe der Ereignisfilter. Speichern Sie diesen Code in einer Datei mit NamenEventFiltersExample.java.
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class EventFiltersExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the position of the circle
circle.setCenterX(300.0f);
circle.setCenterY(135.0f);
//Setting the radius of the circle
circle.setRadius(25.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
//Setting the text
Text text = new Text("Click on the circle to change its color");
//Setting the font of the text
text.setFont(Font.font(null, FontWeight.BOLD, 15));
//Setting the color of the text
text.setFill(Color.CRIMSON);
//setting the position of the text
text.setX(150);
text.setY(50);
//Creating the mouse event handler
EventHandler<MouseEvent> eventHandler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println("Hello World");
circle.setFill(Color.DARKSLATEBLUE);
}
};
//Registering the event filter
circle.addEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting the fill color to the scene
scene.setFill(Color.LAVENDER);
//Setting title to the Stage
stage.setTitle("Event Filters Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac EventFiltersExample.java
java EventFiltersExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Hinzufügen und Entfernen von Ereignishandlern
Um einem Knoten einen Ereignishandler hinzuzufügen, müssen Sie diesen Handler mithilfe der Methode registrieren addEventHandler() des Node Klasse wie unten gezeigt.
//Creating the mouse event handler
EventHandler<javafx.scene.input.MouseEvent> eventHandler =
new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent e) {
System.out.println("Hello World");
circle.setFill(Color.DARKSLATEBLUE);
}
};
//Adding the event handler
circle.addEventHandler(javafx.scene.input.MouseEvent.MOUSE_CLICKED, eventHandler);
Auf die gleiche Weise können Sie einen Ereignishandler mit der Methode removeEventHandler () entfernen, wie unten gezeigt -
circle.removeEventHandler(MouseEvent.MOUSE_CLICKED, eventHandler);
Beispiel
Das folgende Programm ist ein Beispiel für die Ereignisbehandlung in JavaFX mithilfe der Ereignishandler.
Speichern Sie diesen Code in einer Datei mit Namen EventHandlersExample.java.
import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;
public class EventHandlersExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Box
Box box = new Box();
//Setting the properties of the Box
box.setWidth(150.0);
box.setHeight(150.0);
box.setDepth(100.0);
//Setting the position of the box
box.setTranslateX(350);
box.setTranslateY(150);
box.setTranslateZ(50);
//Setting the text
Text text = new Text("Type any letter to rotate the box,
and click on the box to stop the rotation");
//Setting the font of the text
text.setFont(Font.font(null, FontWeight.BOLD, 15));
//Setting the color of the text
text.setFill(Color.CRIMSON);
//setting the position of the text
text.setX(20);
text.setY(50);
//Setting the material of the box
PhongMaterial material = new PhongMaterial();
material.setDiffuseColor(Color.DARKSLATEBLUE);
//Setting the diffuse color material to box
box.setMaterial(material);
//Setting the rotation animation to the box
RotateTransition rotateTransition = new RotateTransition();
//Setting the duration for the transition
rotateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
rotateTransition.setNode(box);
//Setting the axis of the rotation
rotateTransition.setAxis(Rotate.Y_AXIS);
//Setting the angle of the rotation
rotateTransition.setByAngle(360);
//Setting the cycle count for the transition
rotateTransition.setCycleCount(50);
//Setting auto reverse value to false
rotateTransition.setAutoReverse(false);
//Creating a text filed
TextField textField = new TextField();
//Setting the position of the text field
textField.setLayoutX(50);
textField.setLayoutY(100);
//Handling the key typed event
EventHandler<KeyEvent> eventHandlerTextField = new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
//Playing the animation
rotateTransition.play();
}
};
//Adding an event handler to the text feld
textField.addEventHandler(KeyEvent.KEY_TYPED, eventHandlerTextField);
//Handling the mouse clicked event(on box)
EventHandler<javafx.scene.input.MouseEvent> eventHandlerBox =
new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent e) {
rotateTransition.stop();
}
};
//Adding the event handler to the box
box.addEventHandler(javafx.scene.input.MouseEvent.MOUSE_CLICKED, eventHandlerBox);
//Creating a Group object
Group root = new Group(box, textField, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(0);
scene.setCamera(camera);
//Setting title to the Stage
stage.setTitle("Event Handlers Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac EventHandlersExample.java
java EventHandlersExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster, in dem ein Textfeld und ein 3D-Feld angezeigt werden (siehe unten).
Wenn Sie hier einen Buchstaben in das Textfeld eingeben, beginnt sich das 3D-Feld entlang der x-Achse zu drehen. Wenn Sie erneut auf das Feld klicken, stoppt die Drehung.
Verwenden von praktischen Methoden zur Ereignisbehandlung
Einige der Klassen in JavaFX definieren Eigenschaften der Ereignisbehandlungsroutine. Durch Festlegen der Werte für diese Eigenschaften mithilfe der jeweiligen Setter-Methoden können Sie sich bei einem Ereignishandler registrieren. Diese Methoden werden als Convenience-Methoden bezeichnet.
Die meisten dieser Methoden sind in Klassen wie Knoten, Szene, Fenster usw. vorhanden und stehen allen Unterklassen zur Verfügung.
Um beispielsweise einer Schaltfläche einen Mausereignis-Listener hinzuzufügen, können Sie die Komfortmethode verwenden setOnMouseClicked() Wie nachfolgend dargestellt.
playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Hello World");
pathTransition.play();
}
}));
Beispiel
Das folgende Programm ist ein Beispiel, das die Ereignisbehandlung in JavaFX mithilfe der praktischen Methoden demonstriert.
Speichern Sie diesen Code in einer Datei mit dem Namen ConvinienceMethodsExample.java.
import javafx.animation.PathTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
import javafx.util.Duration;
public class ConvinienceMethodsExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the position of the circle
circle.setCenterX(300.0f);
circle.setCenterY(135.0f);
//Setting the radius of the circle
circle.setRadius(25.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
//Creating a Path
Path path = new Path();
//Moving to the staring point
MoveTo moveTo = new MoveTo(208, 71);
//Creating 1st line
LineTo line1 = new LineTo(421, 161);
//Creating 2nd line
LineTo line2 = new LineTo(226,232);
//Creating 3rd line
LineTo line3 = new LineTo(332,52);
//Creating 4th line
LineTo line4 = new LineTo(369, 250);
//Creating 5th line
LineTo line5 = new LineTo(208, 71);
//Adding all the elements to the path
path.getElements().add(moveTo);
path.getElements().addAll(line1, line2, line3, line4, line5);
//Creating the path transition
PathTransition pathTransition = new PathTransition();
//Setting the duration of the transition
pathTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
pathTransition.setNode(circle);
//Setting the path for the transition
pathTransition.setPath(path);
//Setting the orientation of the path
pathTransition.setOrientation(
PathTransition.OrientationType.ORTHOGONAL_TO_TAN GENT);
//Setting the cycle count for the transition
pathTransition.setCycleCount(50);
//Setting auto reverse value to true
pathTransition.setAutoReverse(false);
//Creating play button
Button playButton = new Button("Play");
playButton.setLayoutX(300);
playButton.setLayoutY(250);
circle.setOnMouseClicked (new EventHandler<javafx.scene.input.MouseEvent>() {
@Override
public void handle(javafx.scene.input.MouseEvent e) {
System.out.println("Hello World");
circle.setFill(Color.DARKSLATEBLUE);
}
});
playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Hello World");
pathTransition.play();
}
}));
//Creating stop button
Button stopButton = new Button("stop");
stopButton.setLayoutX(250);
stopButton.setLayoutY(250);
stopButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Hello World");
pathTransition.stop();
}
}));
//Creating a Group object
Group root = new Group(circle, playButton, stopButton);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
scene.setFill(Color.LAVENDER);
//Setting title to the Stage
stage.setTitle("Convenience Methods Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac ConvinienceMethodsExample.java
java ConvinienceMethodsExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt. Klicken Sie hier auf die Wiedergabetaste, um die Animation zu starten, und klicken Sie auf die Stopptaste, um die Animation zu stoppen.
Jede Benutzeroberfläche berücksichtigt die folgenden drei Hauptaspekte:
UI elements- Dies sind die visuellen Kernelemente, die der Benutzer schließlich sieht und mit denen er interagiert. JavaFX bietet eine große Liste weit verbreiteter und allgemeiner Elemente, die von einfach bis komplex reichen und die wir in diesem Tutorial behandeln werden.
Layouts- Sie definieren, wie UI-Elemente auf dem Bildschirm organisiert werden sollen, und geben der GUI (Graphical User Interface) ein endgültiges Erscheinungsbild. Dieser Teil wird im Kapitel Layout behandelt.
Behavior- Dies sind Ereignisse, die auftreten, wenn der Benutzer mit UI-Elementen interagiert. Dieser Teil wird im Kapitel Ereignisbehandlung behandelt.
JavaFX bietet mehrere Klassen im Paket javafx.scene.control. Um verschiedene GUI-Komponenten (Steuerelemente) zu erstellen, unterstützt JavaFX verschiedene Steuerelemente wie Datumsauswahl, Schaltflächentextfeld usw.
Jedes Steuerelement wird durch eine Klasse dargestellt. Sie können ein Steuerelement erstellen, indem Sie die entsprechende Klasse instanziieren.
Im Folgenden finden Sie eine Liste häufig verwendeter Steuerelemente, während die GUI mit JavaFX erstellt wurde.
S.No. | Kontrolle & Beschreibung |
---|---|
1 | Label Ein Beschriftungsobjekt ist eine Komponente zum Platzieren von Text. |
2 | Button Diese Klasse erstellt eine beschriftete Schaltfläche. |
3 | ColorPicker Ein ColorPicker bietet einen Bereich mit Steuerelementen, mit denen ein Benutzer eine Farbe bearbeiten und auswählen kann. |
4 | CheckBox Eine CheckBox ist eine grafische Komponente, die sich entweder im Status "Ein" (wahr) oder "Aus" (falsch) befinden kann. |
5 | RadioButton Die RadioButton-Klasse ist eine grafische Komponente, die sich in einer Gruppe entweder im Status EIN (wahr) oder AUS (falsch) befinden kann. |
6 | ListView Eine ListView-Komponente zeigt dem Benutzer eine Liste mit Textelementen an. |
7 | TextField Ein TextField-Objekt ist eine Textkomponente, mit der eine einzelne Textzeile bearbeitet werden kann. |
8 | PasswordField Ein PasswordField-Objekt ist eine Textkomponente, die auf die Kennworteingabe spezialisiert ist. |
9 | Scrollbar Ein Bildlaufleisten-Steuerelement stellt eine Bildlaufleisten-Komponente dar, damit der Benutzer aus einem Wertebereich auswählen kann. |
10 | FileChooser Ein FileChooser-Steuerelement stellt ein Dialogfenster dar, in dem der Benutzer eine Datei auswählen kann. |
11 | ProgressBar Während die Aufgabe abgeschlossen ist, zeigt der Fortschrittsbalken den Fertigstellungsgrad der Aufgabe an. |
12 | Slider Mit einem Schieberegler kann der Benutzer einen Wert grafisch auswählen, indem er einen Knopf innerhalb eines begrenzten Intervalls schiebt. |
Beispiel
Das folgende Programm ist ein Beispiel, das eine Anmeldeseite in JavaFX anzeigt. Hier verwenden wir die Steuerelementelabel, text field, password field und button.
Speichern Sie diesen Code in einer Datei mit dem Namen LoginPage.java.
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class LoginPage extends Application {
@Override
public void start(Stage stage) {
//creating label email
Text text1 = new Text("Email");
//creating label password
Text text2 = new Text("Password");
//Creating Text Filed for email
TextField textField1 = new TextField();
//Creating Text Filed for password
PasswordField textField2 = new PasswordField();
//Creating Buttons
Button button1 = new Button("Submit");
Button button2 = new Button("Clear");
//Creating a Grid Pane
GridPane gridPane = new GridPane();
//Setting size for the pane
gridPane.setMinSize(400, 200);
//Setting the padding
gridPane.setPadding(new Insets(10, 10, 10, 10));
//Setting the vertical and horizontal gaps between the columns
gridPane.setVgap(5);
gridPane.setHgap(5);
//Setting the Grid alignment
gridPane.setAlignment(Pos.CENTER);
//Arranging all the nodes in the grid
gridPane.add(text1, 0, 0);
gridPane.add(textField1, 1, 0);
gridPane.add(text2, 0, 1);
gridPane.add(textField2, 1, 1);
gridPane.add(button1, 0, 2);
gridPane.add(button2, 1, 2);
//Styling nodes
button1.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");
button2.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");
text1.setStyle("-fx-font: normal bold 20px 'serif' ");
text2.setStyle("-fx-font: normal bold 20px 'serif' ");
gridPane.setStyle("-fx-background-color: BEIGE;");
//Creating a scene object
Scene scene = new Scene(gridPane);
//Setting title to the Stage
stage.setTitle("CSS Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac LoginPage.java
java LoginPage
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Das folgende Programm ist ein Beispiel für ein Registrierungsformular, das Steuerelemente in JavaFX wie z Date Picker, Radio Button, Toggle Button, Check Box, List View, Choice List, usw.
Speichern Sie diesen Code in einer Datei mit dem Namen Registration.java.
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.ToggleButton;
import javafx.stage.Stage;
public class Registration extends Application {
@Override
public void start(Stage stage) {
//Label for name
Text nameLabel = new Text("Name");
//Text field for name
TextField nameText = new TextField();
//Label for date of birth
Text dobLabel = new Text("Date of birth");
//date picker to choose date
DatePicker datePicker = new DatePicker();
//Label for gender
Text genderLabel = new Text("gender");
//Toggle group of radio buttons
ToggleGroup groupGender = new ToggleGroup();
RadioButton maleRadio = new RadioButton("male");
maleRadio.setToggleGroup(groupGender);
RadioButton femaleRadio = new RadioButton("female");
femaleRadio.setToggleGroup(groupGender);
//Label for reservation
Text reservationLabel = new Text("Reservation");
//Toggle button for reservation
ToggleButton Reservation = new ToggleButton();
ToggleButton yes = new ToggleButton("Yes");
ToggleButton no = new ToggleButton("No");
ToggleGroup groupReservation = new ToggleGroup();
yes.setToggleGroup(groupReservation);
no.setToggleGroup(groupReservation);
//Label for technologies known
Text technologiesLabel = new Text("Technologies Known");
//check box for education
CheckBox javaCheckBox = new CheckBox("Java");
javaCheckBox.setIndeterminate(false);
//check box for education
CheckBox dotnetCheckBox = new CheckBox("DotNet");
javaCheckBox.setIndeterminate(false);
//Label for education
Text educationLabel = new Text("Educational qualification");
//list View for educational qualification
ObservableList<String> names = FXCollections.observableArrayList(
"Engineering", "MCA", "MBA", "Graduation", "MTECH", "Mphil", "Phd");
ListView<String> educationListView = new ListView<String>(names);
//Label for location
Text locationLabel = new Text("location");
//Choice box for location
ChoiceBox locationchoiceBox = new ChoiceBox();
locationchoiceBox.getItems().addAll
("Hyderabad", "Chennai", "Delhi", "Mumbai", "Vishakhapatnam");
//Label for register
Button buttonRegister = new Button("Register");
//Creating a Grid Pane
GridPane gridPane = new GridPane();
//Setting size for the pane
gridPane.setMinSize(500, 500);
//Setting the padding
gridPane.setPadding(new Insets(10, 10, 10, 10));
//Setting the vertical and horizontal gaps between the columns
gridPane.setVgap(5);
gridPane.setHgap(5);
//Setting the Grid alignment
gridPane.setAlignment(Pos.CENTER);
//Arranging all the nodes in the grid
gridPane.add(nameLabel, 0, 0);
gridPane.add(nameText, 1, 0);
gridPane.add(dobLabel, 0, 1);
gridPane.add(datePicker, 1, 1);
gridPane.add(genderLabel, 0, 2);
gridPane.add(maleRadio, 1, 2);
gridPane.add(femaleRadio, 2, 2);
gridPane.add(reservationLabel, 0, 3);
gridPane.add(yes, 1, 3);
gridPane.add(no, 2, 3);
gridPane.add(technologiesLabel, 0, 4);
gridPane.add(javaCheckBox, 1, 4);
gridPane.add(dotnetCheckBox, 2, 4);
gridPane.add(educationLabel, 0, 5);
gridPane.add(educationListView, 1, 5);
gridPane.add(locationLabel, 0, 6);
gridPane.add(locationchoiceBox, 1, 6);
gridPane.add(buttonRegister, 2, 8);
//Styling nodes
buttonRegister.setStyle(
"-fx-background-color: darkslateblue; -fx-textfill: white;");
nameLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
dobLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
genderLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
reservationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
technologiesLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
educationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
locationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
//Setting the back ground color
gridPane.setStyle("-fx-background-color: BEIGE;");
//Creating a scene object
Scene scene = new Scene(gridPane);
//Setting title to the Stage
stage.setTitle("Registration Form");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac Registration.java
java Registration
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.
Im Allgemeinen ist ein Diagramm eine grafische Darstellung von Daten. Es gibt verschiedene Arten von Diagrammen, um Daten darzustellen, wie zBar Chart, Pie Chart, Line Chart, Scatter Chart, usw.
JavaFX Bietet Unterstützung für verschiedene Pie Charts und XY Charts. Die Diagramme, die auf einer XY-Ebene dargestellt werden, umfassenAreaChart, BarChart, BubbleChart, LineChart, ScatterChart, StackedAreaChart, StackedBarChart, usw.
Jedes Diagramm wird durch eine Klasse dargestellt und alle diese Diagramme gehören zum Paket javafx.scene.chart. Die benannte KlasseChart ist die Basisklasse aller Diagramme in JavaFX und der XYChart ist die Basisklasse aller Diagramme, die auf der XY-Ebene gezeichnet sind.
Erstellen eines Diagramms
Um ein Diagramm zu erstellen, müssen Sie -
- Definieren Sie die Achse des Diagramms
- Instanziieren Sie die jeweilige Klasse
- Bereiten Sie Daten vor und übergeben Sie sie an das Diagramm
Instanziieren der jeweiligen Klasse
Instanziieren Sie zum Erstellen eines Diagramms die entsprechende Klasse. Wenn Sie beispielsweise ein Liniendiagramm erstellen möchten, müssen Sie die benannte Klasse instanziierenLine wie folgt -
LineChart linechart = new LineChart(xAxis, yAxis);
Wie im obigen Code gezeigt, müssen Sie beim Instanziieren zwei Objekte übergeben, die die X- bzw. Y-Achse des Diagramms darstellen.
Achse definieren
Im Allgemeinen kann die Achse der Diagramme durch - dargestellt werden
- Zahlen wie Bevölkerung, Alter und
- Kategorien wie Wochentage, Länder.
In JavaFX ist eine Achse eine abstrakte Klasse, die die X- oder Y-Achse darstellt. Es gibt zwei Unterklassen, um jeden Achsentyp zu definieren, nämlichCategoryAxis und NumberAxis wie im folgenden Diagramm gezeigt -
Category Axis- Durch Instanziieren dieser Klasse können Sie eine X- oder Y-Achse definieren (erstellen), entlang derer jeder Wert eine Kategorie darstellt. Sie können eine Kategorieachse definieren, indem Sie diese Klasse wie unten gezeigt instanziieren.
CategoryAxis xAxis = new CategoryAxis();
Für diese Achse müssen Sie die Liste der Kategorien und die Beschriftung wie unten gezeigt auf die Achse setzen.
//setting the list of categories.
xAxis.setCategories(FXCollections.<String>observableArrayList
(Arrays.asList("n ame1", "name2"….)));
//Setting label to the axis
xAxis.setLabel("name of the axis ");
NumberAxis- Durch Instanziieren dieser Klasse können Sie eine X- oder Y-Achse definieren (erstellen), entlang der jeder Wert einen numerischen Wert darstellt. Sie können damit einen beliebigen Nummerntyp verwendenAxis, Long, Double, BigDecimalusw. Sie können eine Zahlenachse definieren, indem Sie diese Klasse wie folgt instanziieren:
//Defining the axis
NumberAxis yAxis = new NumberAxis();
//Setting labelto the axis
yAxis.setLabel("name of the axis");
Daten an XY-Diagramme übergeben
Alle XY-Diagramme werden entlang der XY-Ebene dargestellt. Um eine Reihe von Punkten in einem Diagramm zu zeichnen, müssen wir eine Reihe von XY-Koordinaten angeben.
Das <X,Y> Klasse der javafx.scene.chartPaket ist eine Klasse, mit der Sie Daten an ein Diagramm senden können. Diese Klasse enthält eine beobachtbare Liste benannter Serien. Sie können diese Liste mit dergetData() Methode von XYChart.Series Klasse wie unten gezeigt -
ObservableList list = series.getData();
Wo, series ist das Objekt der XYChart.SeriesKlasse. Sie können dieser Liste Daten mit dem hinzufügenadd() Methode wie folgt -
list.add(new XYChart.Data(x-axis data, y-axis data));
Diese beiden Zeilen können wie unten gezeigt zusammen geschrieben werden -
series.getData().add(new XYChart.Data(x-axis data, y-axis data));
Die folgende Tabelle enthält eine Beschreibung verschiedener von JavaFX bereitgestellter Diagramme (Klassen) -
S.No. | Diagramm & Beschreibung |
---|---|
1 | Kuchendiagramm Ein Kreisdiagramm ist eine Darstellung von Werten als Scheiben eines Kreises mit verschiedenen Farben. Diese Slices sind beschriftet und die Werte, die jedem Slice entsprechen, werden im Diagramm dargestellt. In JavaFX wird ein Kreisdiagramm durch eine Klasse mit dem Namen dargestellt PieChart. Diese Klasse gehört zum Paketjavafx.scene.chart. |
2 | Liniendiagramm Ein Liniendiagramm oder Liniendiagramm zeigt Informationen als eine Reihe von Datenpunkten (Markierungen) an, die durch gerade Liniensegmente verbunden sind. Das Liniendiagramm zeigt, wie sich die Daten bei gleicher Zeitfrequenz ändern. In JavaFX wird ein Liniendiagramm durch eine Klasse mit dem Namen dargestellt LineChart. Diese Klasse gehört zum Paketjavafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen LineChart-Knoten in JavaFX erstellen. |
3 | Flächendiagramm Flächendiagramme werden zum Zeichnen von flächenbasierten Diagrammen verwendet. Es zeichnet den Bereich zwischen der angegebenen Punktreihe und der Achse auf. Im Allgemeinen wird diese Tabelle verwendet, um zwei Größen zu vergleichen. In JavaFX wird ein Flächendiagramm durch eine Klasse mit dem Namen dargestellt AreaChart. Diese Klasse gehört zum Paketjavafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen AreaChart-Knoten in JavaFX erstellen. |
4 | Balkendiagramm Ein Balkendiagramm wird verwendet, um gruppierte Daten mithilfe von rechteckigen Balken darzustellen. Die Länge dieser Balken zeigt die Werte. Die Balken im Balkendiagramm können vertikal oder horizontal dargestellt werden. In JavaFX wird ein Balkendiagramm durch eine Klasse mit dem Namen dargestellt BarChart. Diese Klasse gehört zum Paketjavafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen BarChart-Knoten in JavaFX erstellen. |
5 | Blasendiagramm Ein Blasendiagramm wird verwendet, um dreidimensionale Daten zu plattieren. Die dritte Dimension wird durch die Größe (den Radius) der Blase dargestellt. In JavaFX wird ein Blasendiagramm durch eine Klasse mit dem Namen dargestellt BubbleChart. Diese Klasse gehört zum Paketjavafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen BubbleChart-Knoten in JavaFX erstellen. |
6 | Streudiagramm Ein Streudiagramm ist eine Art Diagramm, das Werte aus zwei Variablen verwendet, die in einer kartesischen Ebene dargestellt sind. Es wird normalerweise verwendet, um die Beziehung zwischen zwei Variablen herauszufinden. In JavaFX wird ein Streudiagramm durch eine Klasse mit dem Namen dargestellt ScatterChart. Diese Klasse gehört zum Paketjavafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen ScatterChart-Knoten in JavaFX erstellen. |
7 | Gestapeltes Flächendiagramm In JavaFX wird ein gestapeltes Flächendiagramm durch eine Klasse mit dem Namen dargestellt StackedAreaChart. Diese Klasse gehört zum Paket javafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen StackedAreaChart-Knoten in JavaFX erstellen. |
8 | Gestapeltes Balkendiagramm In JavaFX wird ein gestapeltes Balkendiagramm durch eine Klasse mit dem Namen dargestellt StackedBarChart. Diese Klasse gehört zum Paket javafx.scene.chart. Durch Instanziieren dieser Klasse können Sie einen StackedBarChart-Knoten in JavaFX erstellen. |
Nachdem wir alle erforderlichen Knoten in einer Szene erstellt haben, ordnen wir sie im Allgemeinen in der richtigen Reihenfolge an.
Diese Anordnung der Komponenten innerhalb des Containers wird als Layout des Containers bezeichnet. Wir können auch sagen, dass wir einem Layout gefolgt sind, da es das Platzieren aller Komponenten an einer bestimmten Position innerhalb des Containers umfasst.
JavaFX bietet mehrere vordefinierte Layouts wie z HBox, VBox, Border Pane, Stack Pane, Text Flow, Anchor Pane, Title Pane, Grid Pane, Flow Panel, usw.
Jedes der oben genannten Layouts wird durch eine Klasse dargestellt, und alle diese Klassen gehören zum Paket javafx.layout. Die benannte KlassePane ist die Basisklasse aller Layouts in JavaFX.
Layout erstellen
Um ein Layout zu erstellen, müssen Sie -
- Knoten erstellen.
- Instanziieren Sie die jeweilige Klasse des erforderlichen Layouts.
- Legen Sie die Eigenschaften des Layouts fest.
- Fügen Sie dem Layout alle erstellten Knoten hinzu.
Knoten erstellen
Erstellen Sie zunächst die erforderlichen Knoten der JavaFX-Anwendung, indem Sie ihre jeweiligen Klassen instanziieren.
Wenn Sie beispielsweise ein Textfeld und zwei Schaltflächen haben möchten, nämlich Abspielen und Stoppen in einem HBox-Layout, müssen Sie diese Knoten zunächst wie im folgenden Codeblock gezeigt erstellen.
//Creating a text field
TextField textField = new TextField();
//Creating the play button
Button playButton = new Button("Play");
//Creating the stop button
Button stopButton = new Button("stop");
Instanziieren der jeweiligen Klasse
Instanziieren Sie nach dem Erstellen der Knoten (und dem Ausführen aller Operationen an ihnen) die Klasse des erforderlichen Layouts.
Wenn Sie beispielsweise ein Hbox-Layout erstellen möchten, müssen Sie diese Klasse wie folgt instanziieren.
HBox hbox = new HBox();
Festlegen der Eigenschaften des Layouts
Nach dem Instanziieren der Klasse müssen Sie die Eigenschaften des Layouts mit den entsprechenden Setter-Methoden festlegen.
Beispiel: Wenn Sie im HBox-Layout Platz zwischen den erstellten Knoten festlegen möchten, müssen Sie den Wert für die Eigenschaft mit dem Namen Abstand festlegen. Dies kann mit der Setter-Methode erfolgensetSpacing() wie unten gezeigt -
hbox.setSpacing(10);
Hinzufügen des Formobjekts zur Gruppe
Schließlich müssen Sie das Objekt der Form zur Gruppe hinzufügen, indem Sie es wie unten gezeigt als Parameter des Konstruktors übergeben.
//Creating a Group object
Group root = new Group(line);
Layoutfenster
Im Folgenden sind die verschiedenen von JavaFX bereitgestellten Layoutfenster (Klassen) aufgeführt. Diese Klassen sind im Paket vorhandenjavafx.scene.layout.
S.No. | Form & Beschreibung |
---|---|
1 | HBox Das HBox-Layout ordnet alle Knoten in unserer Anwendung in einer einzigen horizontalen Reihe an. Die benannte Klasse HBox des Pakets javafx.scene.layout repräsentiert das Layout des horizontalen Textfelds. |
2 | VBox Das VBox-Layout ordnet alle Knoten in unserer Anwendung in einer einzigen vertikalen Spalte an. Die benannte Klasse VBox des Pakets javafx.scene.layout repräsentiert das vertikale Layout des Textes. |
3 | BorderPane Das Layout des Rahmenbereichs ordnet die Knoten in unserer Anwendung in den Positionen oben, links, rechts, unten und in der Mitte an. Die benannte Klasse BorderPane des Pakets javafx.scene.layout repräsentiert das Rahmenfenster-Layout. |
4 | StackPane Das Stapelfenster-Layout ordnet die Knoten in unserer Anwendung wie in einem Stapel übereinander. Der zuerst hinzugefügte Knoten wird am unteren Rand des Stapels platziert und der nächste Knoten wird oben platziert. Die benannte Klasse StackPane des Pakets javafx.scene.layout repräsentiert das Stapelfensterlayout. |
5 | TextFlow Das Textfluss-Layout ordnet mehrere Textknoten in einem einzigen Fluss an. Die benannte Klasse TextFlow des Pakets javafx.scene.layout repräsentiert das Textflusslayout. |
6 | AnchorPane Das Layout des Ankerbereichs verankert die Knoten in unserer Anwendung in einem bestimmten Abstand vom Bereich. Die benannte Klasse AnchorPane des Pakets javafx.scene.layout repräsentiert das Ankerfenster-Layout. |
7 | TilePane Das Kachelfenster-Layout fügt alle Knoten unserer Anwendung in Form von Kacheln mit einheitlicher Größe hinzu. Die benannte Klasse TilePane des Pakets javafx.scene.layout repräsentiert das TilePane-Layout. |
8 | GridPane Das Layout des Rasterbereichs ordnet die Knoten in unserer Anwendung als Raster aus Zeilen und Spalten an. Dieses Layout ist praktisch, wenn Sie Formulare mit JavaFX erstellen. Die benannte Klasse GridPane des Pakets javafx.scene.layout repräsentiert das GridPane-Layout. |
9 | FlowPane Das Layout des Flussbereichs umschließt alle Knoten in einem Fluss. Ein horizontaler Flussbereich umschließt die Elemente des Bereichs auf seiner Höhe, während ein vertikaler Flussbereich die Elemente auf seiner Breite umschließt. Die benannte Klasse FlowPane des Pakets javafx.scene.layout repräsentiert das Layout des Flussbereichs. |
Cascading Style Sheets, auch als CSS bezeichnet, ist eine einfache Designsprache, die den Prozess der Präsentierbarkeit von Webseiten vereinfachen soll.
CSS übernimmt das Erscheinungsbild einer Webseite. Mit CSS können Sie die Farbe des Texts, den Schriftstil, den Abstand zwischen Absätzen, die Größe der Spalten und das Layout steuern. Abgesehen davon können Sie auch die verwendeten Hintergrundbilder oder -farben, Layoutdesigns, Variationen in der Anzeige für verschiedene Geräte und Bildschirmgrößen sowie eine Vielzahl anderer Effekte steuern.
CSS in JavaFX
JavaFX bietet Ihnen die Möglichkeit, CSS zu verwenden, um das Erscheinungsbild der Anwendung zu verbessern. Das Paketjavafx.css enthält die Klassen, die zum Anwenden von CSS für JavaFX-Anwendungen verwendet werden.
Ein CSS besteht aus Stilregeln, die vom Browser interpretiert und dann auf die entsprechenden Elemente in Ihrem Dokument angewendet werden.
Eine Stilregel besteht aus drei Teilen:
Selector- Ein Selektor ist ein HTML-Tag, auf das ein Stil angewendet wird. Dies könnte ein beliebiges Tag sein<h1> oder <table>, usw.
Property- Eine Eigenschaft ist eine Art Attribut des HTML-Tags. Einfacher ausgedrückt werden alle HTML-Attribute in CSS-Eigenschaften konvertiert. Sie könnten Farbe sein,border, usw.
Value- Eigenschaften werden Eigenschaften zugewiesen. Beispielsweise kann eine Farbeigenschaft entweder einen Wert habenred oder #F1F1F1, usw.
Sie können die CSS-Stilregelsyntax wie folgt einfügen:
selector { property: value }
Das von JavaFX verwendete Standard-Stylesheet ist modena.css. Es befindet sich im JavaFX-Laufzeitglas.
Hinzufügen eines eigenen Stylesheets
Sie können einer Szene in JavaFX wie folgt ein eigenes Stylesheet hinzufügen:
Scene scene = new Scene(new Group(), 500, 400);
scene.getStylesheets().add("path/stylesheet.css");
Hinzufügen von Inline-Stylesheets
Sie können auch Inline-Stile mit dem hinzufügen setStyle()Methode. Diese Stile bestehen nur aus Schlüssel-Wert-Paaren und gelten für die Knoten, auf denen sie festgelegt sind. Im Folgenden finden Sie einen Beispielcode zum Festlegen eines Inline-Stylesheets für eine Schaltfläche.
.button {
-fx-background-color: red;
-fx-text-fill: white;
}
Beispiel
Angenommen, wir haben eine JavaFX-Anwendung entwickelt, die ein Formular mit einem Textfeld, einem Kennwortfeld und zwei Schaltflächen anzeigt. Standardmäßig sieht dieses Formular wie im folgenden Screenshot gezeigt aus:
Das folgende Programm ist ein Beispiel, das zeigt, wie Sie der obigen Anwendung in JavaFX Stile hinzufügen.
Speichern Sie diesen Code in einer Datei mit dem Namen CssExample.java
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class CssExample extends Application {
@Override
public void start(Stage stage) {
//creating label email
Text text1 = new Text("Email");
//creating label password
Text text2 = new Text("Password");
//Creating Text Filed for email
TextField textField1 = new TextField();
//Creating Text Filed for password
PasswordField textField2 = new PasswordField();
//Creating Buttons
Button button1 = new Button("Submit");
Button button2 = new Button("Clear");
//Creating a Grid Pane
GridPane gridPane = new GridPane();
//Setting size for the pane
gridPane.setMinSize(400, 200);
//Setting the padding
gridPane.setPadding(new Insets(10, 10, 10, 10));
//Setting the vertical and horizontal gaps between the columns
gridPane.setVgap(5);
gridPane.setHgap(5);
//Setting the Grid alignment
gridPane.setAlignment(Pos.CENTER);
//Arranging all the nodes in the grid
gridPane.add(text1, 0, 0);
gridPane.add(textField1, 1, 0);
gridPane.add(text2, 0, 1);
gridPane.add(textField2, 1, 1);
gridPane.add(button1, 0, 2);
gridPane.add(button2, 1, 2);
//Styling nodes
button1.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");
button2.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");
text1.setStyle("-fx-font: normal bold 20px 'serif' ");
text2.setStyle("-fx-font: normal bold 20px 'serif' ");
gridPane.setStyle("-fx-background-color: BEIGE;");
// Creating a scene object
Scene scene = new Scene(gridPane);
// Setting title to the Stage
stage.setTitle("CSS Example");
// Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus.
javac CssExample.java
java CssExample
Bei der Ausführung generiert das obige Programm ein JavaFX-Fenster wie unten gezeigt.