我一直在寻找一种将Web浏览器组件集成到现有的Swing应用程序中的方法,并找到了适用于Java FX
2.0的WebView。此外,我在java.net上找到了一篇博客文章,展示了如何将Java
FX组件集成到Swing应用程序中
。所以我想这可能是可行的,但我还没有尝试过。
我很好奇,您认为这是个好方法吗?有更好的解决方案吗?甚至可行吗?可能有预先捆绑好的东西吗?
的动机是: 我想整合一些WebBrowser- 无论
到现有的Swing应用中,长期目标是摆脱所有整个Java桌面应用程序的,与基于Web的解决方案替换它(该计划是慢慢地将现有方面转换为网页,然后将其显示在WebBrowser-
Component中,直到除了浏览器骨架之外,swing应用程序都没有剩下的东西。后端当然仍然是Java :-)
我还没有尝试过,因为我只是没有时间将JavaFX与我的项目集成在一起(这是一项工作,从长远来看,我们只是在探索替代方案),所以我最好在被烧毁之前先问一下。
很有可能!
一个必须安装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();
}
});
}
}
问题内容: 我有一个使用Spring Batch和Spring MVC的应用程序。我可以将Spring Batch Admin单独部署,并与我的应用程序使用的数据库一起使用,尽管我想将其集成到我自己的应用程序中,还可能会修改其中一些视图。 有没有简单的方法可以做到这一点,还是我必须将其分叉然后从那里去? 问题答案: 根据这个线程显然有一个简单的方法; 在以下位置为Batch Admin定义Disp
... 但是当我运行我的应用程序时,我没有得到任何更改,当我单击应用程序中的某个组件时,我得到了这个错误:
问题内容: 是否可以在现有的Java Apache Tomcat项目中引入osgi-equinox?据我了解,OSGI必须在某种“容器”中运行。我将如何整合它? 我还使用Jersey来获取RESTful资源。 问题答案: 在此桥模型中,安装了一个特殊的servlet,Tomcat调用该servlet来处理请求。OSGi运行时是从该servlet内生成的,但是OSGi运行时本身(例如,春分点)与HT
我正在为我的客户开发一个android应用程序,他要求在应用程序中内置QR扫描仪。所以,我不希望用户不得不从GooglePlay下载另一个应用程序。换句话说,我不想从我的应用程序调用另一个QR扫描仪应用程序。我需要QR扫描仪内置在我的应用程序中。 我在github和这里的stackoverflow上读到了关于ZXing的信息。据我所知,将其QR扫描仪集成到应用程序中不是一个好主意。最好通过Inte
我第一次尝试Drools/Guvnor,我们计划在Guvnor中进行规则创作,编译、构建并将包下载到“规则包目录”。 现在我遇到的问题是,将Drools与我们的Java应用程序集成的最佳方式是什么?选项1)构建知识代理并开始将事实插入内存以在我们的应用程序中进行规则评估。在这种情况下,Drools引擎使用与应用程序JVM相同的JVM。选项2)拥有一个构建知识代理的Drools Server,应用程
我们正在开发一个应用程序,将使用CPLEX解决一个工业问题。开发了一个数学模型(文件)。我们希望直接使用该模型,而不是使用CPLEX Java API重新转录。 在我们的架构中,我们有一个专门用于检索业务数据和创建合适的文件的应用程序。原始模型和这些数据文件应发送到安装在单独机器上的CPLEX实例。 问题是允许加载和运行文件的OPLJavaAPI不提供任何API来使用远程CPLEX实例。另一方面,
问题内容: 我想将paytm钱包集成到我的android应用程序中。我在Google上发现了很多建议和文档,但没有任何效果。如果您知道任何文档,代码示例或有用的建议,请告诉我。提前致谢。 问题答案: 注意:以下是1.0版的内容,现在paytm更新了其sdk,因此您需要相应地进行更改。 转到链接: http://paywithpaytm.com/developer/ 并下载Android + SDK
我想在我的应用程序中引入一项新功能:永久语音识别。 首先,我关注以下帖子: 语音识别 Android中的语音识别 Android离线语音识别(JellyBean) 还有更多其他人,还有来自不同网站的其他帖子。 问题:实际上,我想做的是在不显示谷歌语音活动的情况下获得永久性的语音识别。例如:当我启动应用程序时,语音识别应该启动并收听。当识别器匹配一些单词时,我的应用程序将相应地执行不同的操作。我不喜