如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?

IT技术 java javascript html css user-interface
2021-03-07 00:08:46

我想用干净的 GUI 设计新的 Git 客户端。

是否可以在 Java 应用程序中使用 HTML、CSS 和 JavaScript 的强大功能?

我想对模型使用 Java + JGit,对控制器使用 Java,对视图使用 HTML + CSS + JavaScript。

我不想要客户端 - 服务器模型。我想很好地集成 Java 和 HTML。DOM 事件会直接向 Java 控制器触发事件​​。这样就可以创建丰富的离线应用程序。

6个回答

您可以将 Web 浏览器组件嵌入到您的 Java Swing/JavaFX 桌面应用程序中,该应用程序显示使用 HTML5+CSS+JavaScript 构建的 GUI。您可以在https://jxbrowser-support.teamdev.com/docs/tutorials/cross-desktop-apps.html看到一篇介绍如何执行此操作的文章

允许将 Chromium 嵌入 Java 应用程序的 Java Swing/JavaFX 库之一是JxBrowser使用 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");
    }
}
哇!我一直在寻找可以支持 HTML/JS/CSS 的原生 Java 桌面应用程序,但 1800 美元?我想我明白了,但这肯定是一个高价点。我想我只是习惯了 Apache 许可的开源产品。
2021-04-21 00:08:46
添加 jxbrowser 不是 FOSS,单个开发者许可证需要 1,799 美元。对于某些人来说,这可能使它成为一个不去的地方。
2021-04-24 00:08:46
你仍然需要在 JVMWorld 和 JSWorld 之间架起桥梁
2021-05-05 00:08:46
您还可以使用 Scala.js 将 Scala 编译为 javascript。
2021-05-08 00:08:46
这是真的。为了使其成为可能,API 为 JavaScript 原始类型 (JSValue) 和对象 (JSObject) 提供了包装器。
2021-05-09 00:08:46

这不是真的可行。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 存储库。
2021-05-08 00:08:46

就像@Reverand Gonzo 所说的,您将需要某种形式的服务器/客户端。但是您可以轻松地将 Jetty 服务器嵌入到 Java 应用程序中,然后将 GWT 用于您的客户端代码

用户将如何访问 UI?通过网络浏览器?
2021-04-28 00:08:46

您可以使用JFXPanelHTML、CSS、JavaScript 的强大功能引入您的 Swing 应用程序以嵌入 JavaFX WebView。在此链接中查看 SimpleSwingBrowser 演示:https ://docs.oracle.com/javase/8/javafx/interoperability-tutorial/swing-fx-interoperability.htm

WebView 允许从 Java 调用 JavaScript 函数,反之亦然。这也是使用 Web 技术增强遗留 Java 应用程序的好方法。

JavaFX 2.2 带来了此功能,以提供具有 Web 视图和完整浏览功能的用户界面组件 (GUI)。

有关更多详细信息,请参阅向 JavaFX 应用程序添加 HTML 内容