scr*_*avy 32 java swing desktop-application javafx webview
我一直在寻找一种方法在现有的Swing-Application中集成Web-Browser-Component,并找到了WebView for Java FX 2.0.此外,我在java.net上发现了一篇博客文章,展示了如何将Java FX组件集成到Swing应用程序中.所以我想这可能是可行的,但我还没有尝试过.
我很好奇,你认为这是一个好方法吗?还有更好的解决方案吗?它甚至可行吗?也许是预先分类的东西?
的动机是:我想整合一些WebBrowser- 无论到现有的Swing应用中,长期目标被达到所有摆脱整个Java桌面应用程序的,与基于Web的解决方案替换它(该计划是慢慢地将现有方面转换为网页,然后将其显示在WebBrowser-Component中,直到除了浏览器骨架之外没有任何剩余的swing应用程序.后端当然仍然是Java :-)
我还没有尝试过,因为我没有时间将JavaFX与我的项目集成(这是一项工作,我们只是在长期探索替代方案),所以我最好在我被烧毁之前询问.
scr*_*avy 18
这很有可能!
一个人必须安装JavaFX 2.0,并以某种方式设法jfxrt.jar在Classpath中.
以下代码在JFrame中呈现JFXPanel.JFXPanel包含一个加载的WebViewgoogle.com.
但是,至少在我的机器上,WebView感觉相当邋.. 我正在使用Mac OS X 10.6; JavaFX 2.0仍处于OS X测试阶段.
我找到的替代品包括MozSwing,它看起来很有前途,实际上感觉非常快.可悲的是,该项目自2008年以来没有进一步开发,捆绑的XUL跑者相当陈旧(没有新的花哨的HTML 5).
这两种方法都是通过maven包含的噩梦,您最好设置自己的本地存储库.
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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)