HTML 5 em JPanel?

Boa tarde galera, gostaria de saber se há alguma forma de carregar um arquivo html (tendo dados CSS) num JPanel. Vi que há um modo via JavaFX, mas queria que ele fosse direto por JPanel (O programa deverá só carregar HTML e CSS)

https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html

[quote=ViniGodoy]https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html[/quote] Amigo, mas é só usá-lo que ele reconhece automaticamente o CSS/HTML5?

A princípio, sim.

Não sei até que ponto esse componente foi atualizado para o HTML5, mas é o único disponível em Swing com essa premissa.
Se quiser usar recursos atualizados de verdade, use JavaFX

A princípio, sim.

Não sei até que ponto esse componente foi atualizado para o HTML5, mas é o único disponível em Swing com essa premissa.
Se quiser usar recursos atualizados de verdade, use JavaFX[/quote]

Gostaria de usá-lo (JavaFX), pois vi que roda CSS, HTML, JavaScript, PHP, enfim. É possível criar um JavaFX que rode dentro de um Swing? Como eu uso a webengine.

Depois de uma procurada, achei o JavaFX sendo aplicado num JPanel, criei uma classe chamada browser com base num toturial da oracle (O CÓDIGO NÃO É MEU, SÓ COLOQUEI NUMA CLASSE PARA FICAR BONITINHO)

Tutorial está arqui

Código:

import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.SwingUtilities;

import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.JFXPanel;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebEvent;
import javafx.scene.web.WebView;

import static javafx.concurrent.Worker.State.FAILED;

public class Browser extends JFXPanel
{
	private static final long serialVersionUID = 678541304343512261L;
	private WebEngine engine;
	
	public Browser()
	{
		createScene();
    }

	private void createScene()
	{
		Platform.runLater(new Runnable() {
            @Override 
            public void run() {
 
                WebView view = new WebView();
                engine = view.getEngine();
 
                engine.titleProperty().addListener(new ChangeListener<String>() {
                    @Override
                    public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) {
                        SwingUtilities.invokeLater(new Runnable() {
                            @Override 
                            public void run() {
                            }
                        });
                    }
                });
 
                engine.setOnStatusChanged(new EventHandler<WebEvent><String>>() {
                    @Override 
                    public void handle(final WebEvent<String> event) {
                        SwingUtilities.invokeLater(new Runnable() {
                            @Override 
                            public void run() {
                                // carregamento
                            }
                        });
                    }
                });
 
                engine.locationProperty().addListener(new ChangeListener<String>() {
                    @Override
                    public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) {
                        SwingUtilities.invokeLater(new Runnable() {
                            @Override 
                            public void run() {
                               //URl totalizada
                            }
                        });
                    }
                });
 
                engine.getLoadWorker().workDoneProperty().addListener(new ChangeListener<Number>() {
                    @Override
                    public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, final Number newValue) {
                        SwingUtilities.invokeLater(new Runnable() {
                            @Override 
                            public void run() {
                               	//Progress bar
                            }
                        });
                    }
                });

                engine.getLoadWorker()
                        .exceptionProperty()
                        .addListener(new ChangeListener<Throwable>() {
 
                            public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {
                                if (engine.getLoadWorker().getState() == FAILED) {
                                    SwingUtilities.invokeLater(new Runnable() {
                                        @Override public void run() {
                                           // Erro quando carregar URL
                                        }
                                    });
                                }
                            }
                        });

                setScene(new Scene(view));
            }
        });
	}
	public void loadURL(final String url) {
        Platform.runLater(new Runnable() {
            @Override 
            public void run() {
                String tmp = toURL(url);
 
                if (tmp == null) {
                    tmp = toURL("http://" + url);
                }
 
                engine.load(tmp);
            }
        });
    }

    private static String toURL(String str) {
        try {
            return new URL(str).toExternalForm();
        } catch (MalformedURLException exception) {
                return null;
        }
    }
}