【问题标题】:How to use HTML and CSS as a Java application GUI?如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?
【发布时间】:2011-11-02 20:50:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java javascript html css user-interface


    【解决方案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。

        【讨论】:

        • 这是一个非常广泛的答案。请尝试包含有关您所推荐内容的一些解释或详细信息。例如:“仅将类用于业务逻辑”。这太宽泛了,基本上没有用处。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        • 2019-11-04
        • 2013-12-30
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 2015-03-06
        相关资源
        最近更新 更多