如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?
Posted
技术标签:
【中文标题】如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?【英文标题】:How to use HTML and CSS as a Java application GUI? 【发布时间】:2011-11-02 20:50:11 【问题描述】:我想用干净的 GUI 设计新的 Git 客户端。
是否可以在 Java 应用程序中使用 html、CSS 和 javascript 的强大功能?
我想对模型使用 Java + JGit,对控制器使用 Java,对视图使用 HTML + CSS + JavaScript。
我不想要客户端-服务器模型。我想很好地集成 Java 和 HTML。 DOM 事件会直接向 Java 控制器触发事件。这样就可以创建丰富的离线应用程序。
【问题讨论】:
【参考方案1】:这不是真的可行。 Java 中的富客户端是使用 Swing 或 SWT 完成的。
如果您想为您的用户界面使用 HTML/CSS,您需要使用服务器/客户端模型。它可以像创建本地服务器并启动连接到它的浏览器一样简单,但它仍然是那个模型。
如果您绝对需要将 HTML/CSS 作为您的 UI 框架并且无法使用服务器/客户端模型,那么您最好的选择可能是查看 Google Native Client 之类的东西,但它使用 C/C++ 绑定后端。我没有使用过 Native Client,所以我个人无法提供更多关于这方面的信息。
编辑添加:
一种选择是将本机浏览器嵌入到您的 Swing 应用程序中,使用类似:http://djproject.sourceforge.net/ns/
有一些纯 Java HTML 渲染器,但是,它们很可能不会完全兼容 HTML5/CSS3,更不用说可能还有 Javascript 错误。
请参阅此处了解其中的一些选项:Pure Java HTML viewer/renderer for use in a Scrollable pane
【讨论】:
是的,我想我将不得不使用客户端-服务器模型。优点是人们可以使用自己的浏览器,并且可以远程管理本地 git repos。【参考方案2】:就像@Reverand Gonzo 所说,您将需要某种形式的服务器/客户端。但是你可以很容易地embed a Jetty server into a Java app and then use GWT for your client code。
【讨论】:
用户将如何访问 UI?通过网络浏览器?【参考方案3】:您可以将 Web 浏览器组件嵌入到您的 Java Swing/JavaFX 桌面应用程序中,该应用程序显示使用 HTML5+CSS+JavaScript 构建的 GUI。你可以在https://jxbrowser-support.teamdev.com/docs/tutorials/cross-desktop-apps.html看到一篇描述如何做到这一点的文章
JxBrowser 是允许将 Chromium 嵌入 Java 应用程序的 Java Swing/JavaFX 库之一。使用 JxBrowser API,您可以加载任何网页并使用其 DOM 和 JavaScript。您甚至可以从 JavaScript 代码调用 Java 方法,反之亦然。例如:
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.JSFunctionCallback;
import com.teamdev.jxbrowser.chromium.JSObject;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
public class JavaScriptJavaSample
public static void main(String[] args)
Browser browser = new Browser();
browser.addLoadListener(new LoadAdapter()
@Override
public void onFinishLoadingFrame(FinishLoadingEvent event)
if (event.isMainFrame())
Browser browser = event.getBrowser();
JSObject window = (JSObject)
browser.executeJavaScriptAndReturnValue("window");
window.setProperty("MyFunction", new JSFunctionCallback()
@Override
public Object invoke(Object... args)
for (Object arg : args)
System.out.println("arg = " + arg);
return "Hello!";
);
JSValue returnValue = browser.executeJavaScriptAndReturnValue(
"MyFunction('Hello JxBrowser!', 1, 2, 3, true);");
System.out.println("return value = " + returnValue);
);
browser.loadURL("about:blank");
【讨论】:
你也可以使用Scala.js将scala编译成javascript。 你仍然需要在 JVMWorld 和 JSWorld 之间架起桥梁 确实如此。为了使它成为可能,API 为 JavaScript 原始类型 (JSValue) 和对象 (JSObject) 提供了包装器。 添加 jxbrowser 不是 FOSS 并且要求 1,799 美元购买单个开发人员许可证。这可能会让某些人无法接受。 哇!我一直在寻找可以支持 HTML/JS/CSS 的原生 Java 桌面应用程序,但是 1800 美元?我想我明白了,但这肯定是一个高昂的价格点。我想我只是习惯了 Apache 许可的开源产品。【参考方案4】:JavaFX 2.2 将此功能引入到提供具有 Web 视图和完整浏览功能的用户界面组件 (GUI)。
更多详情请见 Adding HTML Content to JavaFX Applications。
【讨论】:
【参考方案5】:您可以使用JFXPanel 将 HTML、CSS、JavaScript 的强大功能引入您的 Swing 应用程序,以嵌入 JavaFX WebView。在此链接中查看 SimpleSwingBrowser 演示:https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/swing-fx-interoperability.htm
WebView 允许从 Java 调用 JavaScript 函数,反之亦然。这也是使用 Web 技术增强旧版 Java 应用程序的好方法。
【讨论】:
【参考方案6】:在 HTML 中使用 Angular.js,其余部分与 Java 相同,只需将类用于业务逻辑,无需为 awt/swing 编写代码。带有 Spring Boot 的 Angular 在 Java 中为 webapp 快速开发,Java 中的代码更少,无需使用摇摆来创建最佳 webapp。
【讨论】:
这是一个非常广泛的答案。请尝试包含有关您所推荐内容的一些解释或详细信息。例如:“仅将类用于业务逻辑”。这太宽泛了,基本上没有用处。以上是关于如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?的主要内容,如果未能解决你的问题,请参考以下文章
Java Web开发——HTML CSS JavaScript 杂记