JavaFX in Swing-Applikationen einbetten

maGG

Bekanntes Mitglied
darf man das?
'habe eine Beispiel gefunden:
Java:
import javax.swing.JFrame;

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.web.WebView;


public class FXInSwing extends JFrame {

    private static final int WIDTH = 800;
    private static final int HEIGHT = 500;

    public FXInSwing() {
        initGUI();
    }

    public void initGUI() {
        final JFXPanel panel = new JFXPanel();
        this.add(panel);
        this.setTitle("JavaFX in Swing");
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setSize(WIDTH, HEIGHT);
        this.setLocationRelativeTo(null);
        // Lambda Java 8
        Platform.runLater(() -> initJFXPanel(panel));
        this.setVisible(true);
    }

    private void initJFXPanel(JFXPanel panel) {
        Scene scene = new Scene(new Browser(), WIDTH, HEIGHT);
        panel.setScene(scene);
    }

    public static void main(String[] args) {
        new FXInSwing();
    }
}

class Browser extends Pane {

    final WebView view = new WebView();

    public Browser() {
        view.getEngine().load("http://yourwebs.de");
        getChildren().add(view);
    }

    @Override
    protected void layoutChildren() {
        double w = getWidth();
        double h = getHeight();
        layoutInArea(view, 0, 0, w, h, 0, HPos.CENTER, VPos.CENTER);
    }
}
Da stand weiterhin folgendes:
Das gemeinsame Verwenden von JavaFX und Swing-Komponenten in einer Anwendung sollte nur in Ausnahmefällen in Erwägung gezogen werden, kann jedoch z.B. im Rahmen der Wartung und Erweiterung bestehender Anwendungen, gelegentlich sinnvoll oder sogar notwendig sein.
Mir ist aufgefallen, dass das Laden des Panels ziemlich lange dauert, ist das normal?
Habt ihr vielleicht ein Code Schnipsel, der für mich interessant sein könnte?
Ich würde gerne eine Vorschau Funktion für Html Code in mein Programm impementieren.
 

dzim

Top Contributor
Ja, dass darf man. Ist sogar eine Strategie von Anfang an gewesen, um Nutzer von Swing und SWT zu überzeugen.
Das Problem ist jedoch, dass das JavaFX-Toolkit erst dann initialisiert wird, wenn es benötigt wird (hier, wenn du new JFXPanel() aufrufst, glaube ich.
Da du gleichzeitig mit Swing auch JavaFX und den Browser öffnest (WebKit-Engine wird geladen, weiss nicht, ob das auch noch Overhead mit sich bringt), wird dadurch vermutlich relativ viel Arbeit erzeugt. Du könntest dir ja einen Job machen, der das Laden der Webseite etwas verzögert - das könnte vielleicht etwas bringen. Aber sicher bin ich mir nicht.
Hier in deinem Beispiel öffnest du ja nur ein separates Fenster, dass du mit dem JavaFX-Zeug befüllst. Schon mal überlegt, ob du nicht an der Stelle lieber gleich ein reines JavaFX-Fenster erzeugen willst, statt es unbedingt in ein Swing-Frame zu zwingen? Vielleicht bringt das ja noch etwas? (In dem Fall noch hier ein Tipp, sollte es dich betreffen: https://stackoverflow.com/questions/11273773/javafx-2-1-toolkit-not-initialized)
 

maGG

Bekanntes Mitglied
Das kommt für mich leider nicht in Frage, da ich bisher alls in ein JFrame gepackt habe.

Ich habe so eine Art Vorschau Funktion, die in einer Textarea mit dem User kommuniziert. Jeder eingegebene String Wert in ein Textfield wird dort angezeigt, in einer gewissen Schablone/Darstellung/Formatierung. Ich habe also ein DocumentListener für jedes Texfield hinzugefügt und in den Listener dann meine Vorschau Methode.

Am Ende schreibt mein Programm eine txt, htm und bat Datei und kompremiert diese. Für die Htm Datei wäre eine zusätzliche Ansicht ganz schön. Das habe ich bisher mit der browse-Methode gelöst, die eine Fenster in meinem Standardprogramm öffnet und die Datei so anzeigt.
Es wäre natürlich noch eine Ecke cooler, wenn ich vor dem Erzeugen, diese Ansicht bereits hätte. Daher kam mir die Idee bzw. habe ich danach gegooglet und dann habe ich eben dieses JFXPanel gefunden.

Ich wollte es erst mal mit einem Popup-Fenster testen, also ob es funktioniert, wie es funktioniert, welche Optionen ich da habe. Und wenn es gut läuft evtl. die Textarea mit der Vorschau ganz auszutauschen und mein JFXPanel in mein JFrame reinlege und das dann so löse. Aber da bin ich mir jetzt unsicher, ob das Programm dann nicht immer länger laden müsste.
 

dzim

Top Contributor
Ach so, verstehe, kein Problem. Ich dachte halt, da es ein Frame ist, dass du ein separates Fenster möchtest. Aber ich kann deiner Erklärung gut folgen. ;)

Na wie gesagt: Versuch mal, das Laden des HTMLs etwas zu verzögern. Bzw. lade mal keine Website sondern eine lokale HTML, vielleicht genügt das schon...

Die letzte Alternative: Ersetze Swing doch gleich mit JavaFX - ist IMHO eh das bessere Framework. :D
 

dzim

Top Contributor
Hier etwas Stoff zum Lesen...

Tutorials
http://docs.oracle.com/javase/8/javase-clienttechnologies.htm
http://code.makery.ch/library/javafx-8-tutorial/
https://jaxenter.de/java-tutorial-javafx-53878
http://tutorials.jenkov.com/javafx/index.html

Liste mit sonstigen JavaFX-Ressourcen (Blogs, 3rd-Party-Bibliotheken, etc.)
https://github.com/mhrimaz/AwesomeJavaFX

CSS
Oracle (offiziell): https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html
JDK-interne CSS (etwas älterer Build): https://gist.github.com/maxd/63691840fc372f22f470

#edit:
Es gibt hier einen Sub-Thread zur GUI-Programmierung mit Swing, SWT und JavaFX: http://www.java-forum.org/forum/awt-swing-javafx-swt.13/
Da kannst du gerne Fragen stellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
Juelin Netbeans mit JavaFX, FXML und Scenebuilder Java Basics - Anfänger-Themen 11
Juelin javaFX mit Elementen Java Basics - Anfänger-Themen 6
Juelin Netbeans und javafx Java Basics - Anfänger-Themen 6
M Wo den Ordner javafx-sdk-21.0.2 unter Linux ablegen? Java Basics - Anfänger-Themen 5
A Kapazität JavaFX TextField Java Basics - Anfänger-Themen 4
L JavaFX - grundlegende Verständnisprobleme Java Basics - Anfänger-Themen 1
S JavaFX Java Basics - Anfänger-Themen 1
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
A JavaFX Toggle_Button_Disable Java Basics - Anfänger-Themen 2
ac83 JavaFX - Kompilierungsproblem Java Basics - Anfänger-Themen 1
R Intellij javafx --> jar Java Basics - Anfänger-Themen 11
O Compiler-Fehler JavaFX fmxl LoadExeption Java Basics - Anfänger-Themen 4
M Javafx Timeline Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
A JavaFX-Filechooser Java Basics - Anfänger-Themen 5
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
A JavaFx - SceneBuilder Java Basics - Anfänger-Themen 5
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
G Javafx Eventhandler zu jedem Node Java Basics - Anfänger-Themen 1
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
T HTMLEditor JavaFX Java Basics - Anfänger-Themen 4
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
R Umsetzungsplan JavaFx App Java Basics - Anfänger-Themen 9
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
P JavaFx einrichten Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
D JAVAFX WebVIEW zu JSOUP Java Basics - Anfänger-Themen 3
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J javafx mediaplayer mit https Java Basics - Anfänger-Themen 3
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
O JavaFX XML Versuch Java Basics - Anfänger-Themen 2
O JavaFX Java Basics - Anfänger-Themen 7
M JavaFX-Übung Autospiel Java Basics - Anfänger-Themen 4
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
L JavaFx ListView rechts abgeschnitten Java Basics - Anfänger-Themen 0
I Javafx Tabpane Reiter blockieren Java Basics - Anfänger-Themen 1
S JavaFX Beginneraufgabe Java Basics - Anfänger-Themen 1
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
U Javafx Array aus Buttons Java Basics - Anfänger-Themen 2
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M JavaFX: Problem mit der TableView Java Basics - Anfänger-Themen 0
P JavaFX ohne FXMLLoader Java Basics - Anfänger-Themen 3
K JavaFX UI controls Java Basics - Anfänger-Themen 1
B Farbverlauf erstellen ohne Javafx, AWT usw.? Java Basics - Anfänger-Themen 34
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
M Ausgabe eines Arrays auf Label (Javafx) Java Basics - Anfänger-Themen 4
K Threads Multithread in JavaFx Java Basics - Anfänger-Themen 11
R Threads in JavaFX Java Basics - Anfänger-Themen 3
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
Spencer Reid JavaDoc zu JavaFx hinzufügen Java Basics - Anfänger-Themen 1
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D OOP JavaFX objektorientiert Java Basics - Anfänger-Themen 2
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
P JavaFX - Komponenten skalieren Java Basics - Anfänger-Themen 16
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
F javafx.fxml.LoadException: Root hasn't been set. Java Basics - Anfänger-Themen 0
J JavaFX aus Java-Application heraus starten Java Basics - Anfänger-Themen 7
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
D Javafx XYChart Variable in Schleife erzeugen? Java Basics - Anfänger-Themen 18
E JavaFX und Java auf Kommandozeile compilen Java Basics - Anfänger-Themen 2
J Webanwendung JavaFX Java Basics - Anfänger-Themen 4
Povlsen84 [javafx] Zusammenarbeit mit Tomcat Java Basics - Anfänger-Themen 4
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben