Java还在用SWT开发UI吗-用JCEF吧

本文探讨了在Java桌面应用中集成浏览器的各种方案,包括SWT、JavaFX WebView、JxBrowser及JCEF,并详细介绍了使用JCEF集成Chromium的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

 

前言

一. SWT集成浏览器

二. SWT之外的尝试

1. JavaFX浏览器组件(WebView)

2. Jxbrowser

3. Jcef

三. 使用Jcef集成Chromium

1. 获取Jecf相关的jar包

2. 构建

总结


前言

    在工作中, 我们经常会开发一些Windows的桌面软件工具. 笔者使用的是编程语言是Java, 很自然就用了SWT/JFace这套框架进行开发. 实际跟Eclipse搭配使用起来是很爽的. 它可以在Eclipse进行UI界面编辑, 所见及所得, 大大提高了开发效率. 随着用户审美的提高, 大家已经不满足于只能显示表格类的可视化了, 要求要支持各种柱状图, 饼图, 曲线图等等. 显然, 在SWT/JFace框架上开发这个类图形显然有些吃力. 那么自然地就会想到用B/S架构来开发, 问题就在于工具软件在开发的时候, 需要调用一些本地地动态库(dll)去完成一些功能. 另一方面, 工具软件用B/S来开发显得有些重. 所以想法就此打住. 能不能内嵌个浏览器, 然后, 界面优化用前端那一套, 中间再做一个前端JS与Java交互数据的接口. 那么, 问题就可以得到很好的解决. 于是乎, 就这样入坑了...


一. SWT集成浏览器

关于SWT继承浏览器方面的内容. 可以到SWT FAQ看一下关于Browser部分. 我大概瞄了一眼, SWT支持4种样式的浏览器:

  1. SWT.NONE: 使用的是本地的渲染, 也就是IE 浏览器的内核, emmm...IE啊, 嗯, 果断不用
  2. SWT.WEBKIT: 使用的是WebKit, emmm, 也不用,要求用户安装Safari
  3. SWT.Mozilla: 需要装XULRunnner之类的驱动, 不幸的是,XULRunner已过时,Mozilla团队不再构建
  4. SWT.CHROMIUM: 从4.17版本开始, 就支持创建也非常简单, 而且用Chromium内核, 可以支持很多的前端框架. 笔者实际也写了demo, 需要使用JDK 8 64 bit 以上版本构建, 而且没有32 bit的版本, 因为SWT 从4.10开始就不支持32bit了, 感兴趣的可以关注我后面写一篇例子

emmm, 由于笔者需要用32bit的JDk去构建, 所以SWT的这个新特性就只能洒泪放弃了...

二. SWT之外的尝试

1. JavaFX浏览器组件(WebView)

这个东西想法很好, 起码JDK原生就支持, 但是遗憾的是它与GTK +版本存在一些兼容性问题, 由于它使用了旧版本的WebKitGTK, 它运行起来非常缓慢, 最简单的渲染Echart的曲线图, 都一卡一卡的, 让我一度想摔键盘

2. Jxbrowser

JxBrowser是一个让Java可以轻松集成Chrome浏览器的跨平台库, 确实好用, 但是收费. 可以破解, 笔者尝试了6.21版本的破解版, 好用是好用, 但一个电脑只供一个进程使用JxBrowser, 不能同时多个进程使用, 而且会偶尔出现不能使用. 内核加载也慢, 也可能是我程序的问题. 哎, 放弃...

3. Jcef

emmm, 笔者最终选择用它, 加载比较快, 而且可以支持32 bit JDK, 就它了!

三. 使用Jcef集成Chromium

1. 获取Jecf相关的jar包

关于如何获取jar包, 网上有很多教程, 大家可以参考这个: 比较简单的获取 JCEF 相关 jar 包的教程 非常详细的获取 JCEF 相关 jar 包的教程

2. 构建

基于IDEA构建的大家可以参考: 【java】本地客户端内嵌浏览器2 - chrome/chromium/cef/jcef

想一下, 可以去Echart官网看一下: Examples - Apache ECharts

这些图马上就可以支持了, 是不是很香?


总结

通过一系列的调研与尝试, 最终锁定了Jcef去集成Chromium, 然后使用各种前端框架去优化UI, 比如VUE, Echart等等, 下篇文章将使用Eclipse来构建, 期待一下吧

 

内容概要:本文介绍了在Java中使用Swing嵌入浏览器的多种技术方案及其应用实例。首先提到的是JCEF框架,它能够将Chromium浏览器内核嵌入Java应用程序中,通过创建CefApp实例和CefBrowser类来实现浏览器窗口的创建与网页加载。其次是JEditorPane组件,虽然它对复杂网页的支持有限,但能很好地处理简单的HTML页面,并可通过注册监听器实现页面跳转。再者是DJNativeSwing-SWT组件,它允许开发者选择不同的浏览器内核(如WEBKIT),并通过实例化浏览器对象完成嵌入操作。最后是JavaFX WebView结合Swing的方式,这种方式利用了JavaFX中的WebView组件强大的HTML5、CSS3和JavaScript支持能力,通过JFXPanel将WebView嵌入到Swing应用中,实现了良好的交互体验。 适合人群:有一定Java编程基础,尤其是熟悉Swing框架的开发者,包括但不限于初级和中级程序员。 使用场景及目标:①需要在Java桌面应用程序中集成浏览器功能的开发人员;②希望通过简单配置即可嵌入浏览器并加载特定网页的快速开发需求;③追求较好的HTML5、CSS3和JavaScript支持效果的应用场景;④学习不同嵌入方式的特点,以便根据实际需求选择最合适的方案。 阅读建议:由于文中涉及多个技术方案,每个方案都有各自的优缺点和适用范围,在学习过程中应结合自身项目需求进行选择,并注意各方案之间的差异性和实现细节。对于初学者来说,可以从JEditorPane开始尝试,随着技能的增长逐步探索更复杂的嵌入方式。
<think>嗯,用户问Java除了Swing有没有更现代化的UI组件。首先,我需要确认用户的需求。他们可能已经用Swing开发过,但觉得界面不够好看或者不够现代,想找替代方案。Swing虽然功能强大,但默认的外观确实比较老旧,尤其是在现在追求扁平化和Material Design的时代。 接下来,我得想想Java生态中有哪些现代UI库。JavaFX肯定是第一个想到的,它是Oracle推荐的Swing替代品,支持CSS样式和FXML,界面可以做得更美观。但用户可能不知道JavaFX已经独立于JDK,需要单独引入,或者可能对它的现状不太了解,比如社区支持和更新频率。 然后,有没有其他第三方库呢?比如JPro,它支持Web和桌面混合应用,可能适合需要跨平台或云端部署的项目。还有SWT,虽然主要用于Eclipse,但结合JFace也能做出不错的界面,不过可能不够现代化。 用户可能不仅仅是在寻找库,还可能关心如何快速开发、是否有活跃的社区、文档是否齐全。比如,JavaFX有丰富的教程和Scene Builder这样的可视化工具,这对开发者来说很重要。而像MaterialFX这样的库,专门为JavaFX提供Material Design组件,可能更符合用户对美观的需求。 另外,用户的问题中提到“现代化组件”,可能还涉及到跨平台、响应式设计、与Web技术的整合。比如JPro允许将Java桌面应用转换为Web应用,这可能是一个加分项。而TornadoFX和FXGL虽然分别是Kotlin和游戏开发的框架,但如果有相关需求,也可以作为备选。 还需要考虑用户的技术栈,如果他们已经在用Kotlin,TornadoFX会是一个不错的选择。如果是游戏开发,FXGL更合适。但用户的问题主要是关于一般应用的UI,所以重点可能在JavaFX及其衍生库。 另外,用户可能对Swing的替代方案有性能或兼容性的担忧。比如,JavaFX需要Java 8以上,而某些第三方库可能有自己的依赖管理。需要指出这些潜在的问题,比如JavaFX需要单独添加依赖,尤其是在JDK 11之后不再内置。 最后,总结这些选项,给出推荐,比如JavaFX作为主要推荐,然后列出其他库的适用场景,帮助用户根据具体需求选择。同时提醒社区支持和学习资源的重要性,毕竟一个好的库如果没有文档或社区,使用起来会很困难。</think>--- ### **通俗版讲解:Java 的现代 UI 组件推荐** Java 的 Swing 确实像“老式按键手机”——功能能用,但界面不够酷。现在 Java 生态中已经有了更现代化的选择: --- #### **1. JavaFX:官方钦定的「新王者」** - **特点**: - 支持 **CSS 样式**,界面可以像网页一样美化(比如圆角、阴影、渐变色)。 - 用 **FXML** 文件分离界面设计和代码,类似前端开发中的 HTML + CSS。 - 内置 **动画效果**、3D 图形、WebView(内嵌浏览器)。 - **效果对比**: - Swing 默认风格像 Windows XP,JavaFX 默认像 Windows 10。 - 示例:![JavaFX 界面](https://example.com/javafx-demo.png)(扁平化设计、支持暗黑模式) - **缺点**:需要 JDK 8 及以上,且从 JDK 11 开始需手动添加依赖。 --- #### **2. 第三方库:给 JavaFX「打补丁」** 如果觉得 JavaFX 还不够,可以用这些库增强: - **MaterialFX**:直接提供 **Material Design 风格组件**(类似 Android 或谷歌网页的按钮、输入框)。 ```java // 示例:MaterialFX 的浮动输入框 MFXTextField username = new MFXTextField("用户名"); username.setFloatingText("请输入用户名"); ``` - **JPro**:把 JavaFX 应用直接变成 **网页版**(无需改代码,适合云端部署)。 - **TornadoFX**:用 Kotlin 简化 JavaFX 开发(代码更简洁,适合 Kotlin 爱好者)。 --- #### **3. 其他小众但现代的选择** - **SWT + JFace**:EclipseUI 库,比 Swing 更接近原生系统风格(适合开发 IDE 类工具)。 - **FXGL**:专注做 **游戏界面**(支持 2D/3D 动画、粒子特效)。 --- ### **直接回答:有!推荐路线图** 1. **首选 JavaFX**:官方维护,生态完善,适合大多数桌面应用。 2. **MaterialFX + 场景工具**:用 Scene Builder 拖拽界面 + MaterialFX 美化,快速开发。 3. **Web混合开发**:JavaFX + JPro 直接转网页版,或者用 JCEF 嵌入 Chromium 内核。 --- ### **避坑指南** - **别用 Swing 魔改**:强行给 Swing 加皮肤(如 Substance)效果有限,代码反而更复杂。 - **慎用 Web 嵌入**:用 Java 内嵌浏览器(如 JxBrowser)可能有版权和性能问题。 - **优先看社区**:JavaFX 的 GitHub、Stack Overflow 活跃,MaterialFX 更新频繁,小众库容易弃坑。 --- ### **一句话总结** **“Java 的现代界面选 JavaFX,用 MaterialFX 或 TornadoFX 加强;要做网页混合选 JPro,游戏开发上 FXGL。”**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值