如何使用HTML和CSS作为Java应用程序GUI?
我想用一个干净的GUI设计新的Git客户端。
是否可以在Java应用程序中使用HTML,CSS和JavaScript的强大功能?
我想使用Java + JGit用于模型,Java用于控制器,HTML + CSS + JavaScript用于视图。
我不想要客户端-服务器模型。我想很好地集成Java和HTML。DOM 事件将直接向 Java 控制器触发事件。这样就可以创建丰富的脱机应用程序。
我想用一个干净的GUI设计新的Git客户端。
是否可以在Java应用程序中使用HTML,CSS和JavaScript的强大功能?
我想使用Java + JGit用于模型,Java用于控制器,HTML + CSS + JavaScript用于视图。
我不想要客户端-服务器模型。我想很好地集成Java和HTML。DOM 事件将直接向 Java 控制器触发事件。这样就可以创建丰富的脱机应用程序。
您可以将Web浏览器组件嵌入到Java Swing / JavaFX桌面应用程序中,该应用程序显示使用HTML5 + CSS + JavaScript构建的GUI。您可以在 https://jxbrowser-support.teamdev.com/docs/tutorials/cross-desktop-apps.html 上看到一篇介绍如何执行此操作的文章
JxBrowser是Java Swing/JavaFX库之一,它允许将Chromium嵌入到Java应用程序中。使用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");
}
}
这实际上并不可行。Java 中的富客户端是使用 Swing 或 SWT 完成的。
如果要在用户界面中使用 HTML/CSS,则需要使用服务器/客户端模型。它可以像创建本地服务器并启动连接到它的浏览器一样简单,但它仍然是该模型。
如果你绝对需要使用HTML / CSS作为你的UI框架,并且不能去服务器/客户端模型,那么你最好的选择可能是看看像Google Native Client这样的东西,但它在后端使用C / C++绑定。我没有使用本机客户端,所以我不能亲自提供有关这方面的更多信息。
编辑以添加:
一种选择是使用如下方式将本机浏览器嵌入到 Swing 应用中:http://djproject.sourceforge.net/ns/
有一些纯Java HTML渲染器,但是,它们很可能不完全符合HTML5 / CSS3,更不用说可能也有Javascript错误了。
有关其中一些选项,请参阅此处:纯 Java HTML 查看器/呈现器,用于可滚动窗格