webengine tutorial integrar example ejemplos con java swing webview desktop-application javafx

tutorial - Integración de JavaFX 2.0 WebView en una aplicación Swing Java SE 6



webview java netbeans (2)

¡Es muy posible!

Uno tiene que instalar JavaFX 2.0 , y de alguna manera se las arregla para tener jfxrt.jar en el Classpath.

El siguiente código representa un JFXPanel dentro de un JFrame. El JFXPanel contiene un WebView que carga google.com .

Sin embargo, al menos en mi máquina, el WebView se siente bastante descuidado. Estoy trabajando en Mac OS X 10.6; JavaFX 2.0 todavía está en beta para OS X.

Las alternativas que encontré incluyen MozSwing , que parecía muy prometedor y se siente bastante rápido en realidad. Lamentablemente, el proyecto no se está desarrollando más desde 2008 y el corredor XUL incluido es bastante viejo (no es un nuevo html 5).

Ambos enfoques son una pesadilla para incluir vía maven, es mejor que configure su propio repositorio local.

import java.awt.Dimension; import java.awt.Point; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class JavaFX { /* Create a JFrame with a JButton and a JFXPanel containing the WebView. */ private static void initAndShowGUI() { // This method is invoked on Swing thread JFrame frame = new JFrame("FX"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); // do the layout manually final JButton jButton = new JButton("Button"); final JFXPanel fxPanel = new JFXPanel(); frame.add(jButton); frame.add(fxPanel); frame.setVisible(true); jButton.setSize(new Dimension(200, 27)); fxPanel.setSize(new Dimension(300, 300)); fxPanel.setLocation(new Point(0, 27)); frame.getContentPane().setPreferredSize(new Dimension(300, 327)); frame.pack(); frame.setResizable(false); Platform.runLater(new Runnable() { // this will run initFX as JavaFX-Thread @Override public void run() { initFX(fxPanel); } }); } /* Creates a WebView and fires up google.com */ private static void initFX(final JFXPanel fxPanel) { Group group = new Group(); Scene scene = new Scene(group); fxPanel.setScene(scene); WebView webView = new WebView(); group.getChildren().add(webView); webView.setMinSize(300, 300); webView.setMaxSize(300, 300); // Obtain the webEngine to navigate WebEngine webEngine = webView.getEngine(); webEngine.load("http://www.google.com/"); } /* Start application */ public static void main(final String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { initAndShowGUI(); } }); } }

Estaba buscando una manera de integrar un componente Web-Browser en una aplicación Swing existente y encontrar WebView para Java FX 2.0. Además, encontré una publicación de blog en java.net que muestra cómo integrar un componente de Java FX en una aplicación de Swing . Así que supongo que podría ser factible, pero aún no lo he intentado.

Tengo curiosidad, ¿crees que este es un buen enfoque? ¿Hay mejores soluciones? ¿Es incluso factible? ¿Es quizás algo prefabricado por ahí?

La motivación es: quiero integrar algo de WebBrowser ( lo que sea) en una Swing-Application existente, el objetivo a largo plazo es deshacerse de toda la aplicación Java Desktop, reemplazándola con una solución basada en la web (el plan es convierta lentamente los aspectos existentes en páginas web que luego se muestran en el componente WebBrowser hasta que no quede nada de la aplicación swing excepto el esqueleto del navegador). El backend por supuesto sigue siendo Java :-)

No lo he intentado todavía porque simplemente no tengo tiempo para integrar JavaFX con mi proyecto (es un trabajo, solo estamos explorando alternativas a largo plazo), así que es mejor que pregunte antes de que me queme.


Si necesita incrustar el navegador web ligero Swing basado en el motor Chromium, puede echar un vistazo a la biblioteca JxBrowser . El siguiente código muestra cómo incrustar el componente del navegador en JFrame y cargar alguna página web:

import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.swing.BrowserView; import javax.swing.*; import java.awt.*; /** * This sample demonstrates how to create Browser instance, * embed it into Swing BrowserView container, display it in JFrame and * navigate to the "www.google.com" web site. */ public class BrowserSample { public static void main(String[] args) { Browser browser = new Browser(); BrowserView browserView = new BrowserView(browser); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.add(browserView, BorderLayout.CENTER); frame.setSize(700, 500); frame.setLocationRelativeTo(null); frame.setVisible(true); browser.loadURL("http://www.google.com"); } }

La página web será procesada por el motor Chromium.

Es gratis para proyectos de código abierto;)