如何使用 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 杂记

在一个WEB工程中,JSP和HTML页面应放在啥地方?

DIV+CSS,如何让图片自适应大小?

怎样用css控制图片自适应大小?

如何使用 HTML 和 CSS 为我的 java 应用程序创建用户界面?

怎样用css控制图片自适应大小?