如何创建“现代外观”的 Java 桌面应用程序?

Posted

技术标签:

【中文标题】如何创建“现代外观”的 Java 桌面应用程序?【英文标题】:How can I create a "modern looking" Java desktop application? 【发布时间】:2012-04-25 10:40:39 【问题描述】:

会定期提出与此类似的问题,但其中许多答案已过时。

我需要用 Java 构建一个跨平台的桌面应用程序,其 GUI 质量与现代桌面应用程序相当。

Swing 是默认选择,但我还没有遇到过一个看起来不那么过时和笨拙的 Swing 应用程序(我知道这是主观的,但使用 GUI 很难避免审美判断)。

我注意到新的比特币客户端现在使用 QT 和 Java 绑定,并且确实有一个吸引人的用户界面,但它的缺点是它不再是纯 Java。

我在搜索与 Swing 相关的库时发现的大部分内容都已有 5 年或更长时间了,尽管从那时起桌面应用程序的美学已经发生了显着变化。

如果您需要从头开始构建 Java 桌面应用程序,您会为它的 GUI 使用什么?

【问题讨论】:

我不认为这个问题会继续存在,但是...... 这个问题在这里不合适,因为它要求讨论和意见。常见问题解答特别提到讨论类型的问题不适合 SO 的问答格式。如果您有特定的编程问题,请询问他们,我们会尽力提供帮助。对话式问题在这里效果不佳,因为它们无法得到明确的回答。谢谢。 :) 肯,我不同意。并非每个问题都有黑白答案,如果 SO 仅限于确实有黑白答案的问题,那么它的价值将大大降低。总的来说,我认为人们太急于在这里结束问题,因为误报(一个本不应该结束的问题)造成的伤害远大于误报(一个问题应该已经关闭但没有)。 【参考方案1】:

我还可以为您提供一个新的 LaF 供您研究 - WebLaF。我目前正在努力为它带来许多 UI 功能,并通过使用 WebLaF 库的基本功能使任何人都可以更轻松地使用 Swing。

几个例子展示了一些 WebLaF 组件的外观:

我的一些主要目标:

    外观精美且外观现代的 L&F,支持所有 Swing 组件 标准 Swing 中找不到的大量附加组件 大量实用程序类可帮助您编写代码

WebLaF 库还提出了一些其他优势和独特功能:

    这是一个开源项目(GPLv3 许可) 使用 Painters 系统轻松设置组件样式(特别是使用 9 个补丁文件) 快速轻松地自定义默认“Web”样式 许多功能可加速和简化 Swing 应用程序界面的创建

你可以试试demo-app 看看它是否足够现代和简单:)

【讨论】:

你最好的这个 LAF 很棒 :) Mikle 的作品绝对漂亮,值得表扬。 +++ L&F 的顶部,请忽略 - 但必须对 getPreferredSize (适用于所有 JComponents 的整个 L&F 的一个常数)和 gap vs. 做一些事情。标准 LayoutManagers 的调整(确定谁在乎) @mKorbel 并没有真正理解你的意思。使用 WebLaF 的首选大小与不使用它的方式相同,WebLaF 只是提供了一些额外的选项来配置它。而且我没有对标准布局管理器做任何事情——WebLaF 使用几乎与 MetalLookAndFeel 相同的布局样式,我记得只做了一些小的改进,并且没有改变任何与布局相关的东西。虽然我可能会遗漏一些东西 - 真的很想知道是否真的存在任何错误:) 有趣的信息,你被MetalLookAndFeel覆盖了,可能与我对屏幕上非比例绘画的评论相对应,我的问题是调用doLayout(我记得很少有小的改进,并且不会改变任何布局相关的东西),下次我和你的L&F一起玩的时候我会用printcreen发表评论【参考方案2】:

你看过JavaFX 2.0吗?它旨在与 Swing 轻松互操作,并具有许多现代的“好看”控件。

此外,正如 lrandroid 所提到的,如果您使用以下方式设置系统外观和感觉,Swing 应用程序可能看起来像原生应用程序:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

【讨论】:

【参考方案3】:

考虑改变 Java 程序的外观。这允许您自定义程序的整体“主题”。 Here 是有关更改 LAF 的信息。

【讨论】:

是的,我知道 - 您对 Swing 的现代 LAF 有什么具体建议吗? 我个人更喜欢 GTK LAF。这里还有一些其他好看的:dlemmermann.wordpress.com/2011/05/10/….【参考方案4】:

现代 javascript 框架(ExtJS、Dojo 等)提供相同或更丰富的小部件(例如 Excel 等网格)、更广泛的 L&F,并且通常更适合用户的操作系统。 用户对他们的浏览器也很满意,嘿,“现代的东西”在网络上,而今天的现代网络是 html+Javascript。

将应用转换为“类似网络”的开销很小。嵌入式 Jetty 可以保持非常小,磁盘空间已不再是问题。

对于应用程序的未来发展,沿着这条路线还有其他好处。

突然间,桌面应用程序变成了服务器应用程序,可以从另一个桌面访问。我们能够在几周内将桌面应用推广到“门户”。 根据 (Ajax) Web 服务重写应用程序可轻松过渡到创建完整的 REST(或 SOAP...)服务堆栈。然后可以将该应用程序集成到其他应用程序中,轻松地进行外部监控等...... 只关注 UI 层,对其他设备(智能手机、平板电脑等)的支持变得更加容易 随着应用程序的增长,关注点分离更加清晰;开发 UI 的开发人员不必处理低级代码。 有很多优秀的 JS/HTML 设计人员和开发人员不使用 Java 编程。

编辑

3 年后,感谢Electron,这变得非常容易

【讨论】:

您如何处理以跨平台方式启动 Web 浏览器?您能否举一些使用 Web 浏览器作为 UI 的现代桌面应用程序的示例? 使用 Java 6+ Desktop.getDesktop( ).browse( new URI( uriString ) ); ..您可以将其与 TrayIcon 关联。如果您的应用在后台运行,则可以通过单击图标并再次执行上述调用来“显示”用户界面。 现代应用程序:将浏览器用于本地应用程序是 Adob​​e Air 和 HTML 5 存储的原因(当 HTML5 出现类似功能时,Google 放弃了它的应用程序)。 有趣的想法...您是否偶然知道一些产品将这种方法用于桌面应用程序?【参考方案5】:

尝试以下方法之一:

    JTattoo JGoodies Quaqua

【讨论】:

【参考方案6】:

Nimbus 的外观和感觉如何? Oracle Link 也可以看看SO-Question

【讨论】:

【参考方案7】:

我知道这个问题很老了,但是如果你不想使用 FX 并且仍然想使用 Swing,那么试试 MacWidgets,我已经在几个项目中使用过它。它很轻,看起来很棒。下面是我正在做的一个旧项目,随着时间的推移,我已经完善了使用 macwidgets,现在在我的公司内部使用它。

http://www.digitalhand.net/projects/jdataanalyzer/mainGUI.png

【讨论】:

【参考方案8】:

QT 相当广泛,但也非常庞大(臃肿)和复杂。例如,还有开放办公室使用的 SWT 库。 SWT 对按钮、表格等使用原生 UI 小部件,而 Swing 模拟它们。

但是,趋势显然是使用 HTML 和 Javascript 为浏览器编写富客户端应用程序。在过去的几年里,这两者都取得了巨大的进步。

HTML5 专门针对具有更好的表单和本地数据库等功能的富客户端应用程序,以支持断开连接的场景(请注意,最后一个功能尚未标准化,但已由所有最新浏览器实现)。

Javascript 现在拥有强大的库,其中包含 jQuery 及其许多插件。甚至还有像 Coffeescript 这样的语言可以用来生成语法更简单、更强大的 Javascript。

此类应用也无需连接到外部服务器。可以在客户端安装小型本地服务器(例如:jetty、node.js、...)和数据库(SQLite、H2、...),以创建一个完全独立的应用程序。

【讨论】:

您能否提供任何具有基于 Web 的 UI 的现代桌面应用程序示例?我知道Freenet 做到了,但这并不是一个好的 UI 设计的例子:-/【参考方案9】:

我对@9​​87654321@ 有很好的体验。

它易于安装、跨平台、无外部依赖、开源(Apache 许可)、包括暗模式和大量themes。

添加后:

UIManager.setLookAndFeel( new FlatLightLaf() );

您的应用看起来像是在过去十年中编写的,而不是在上个千年中编写的。

它还有一个高对比度主题,便于访问。

【讨论】:

感谢您的提示。 FlatLaf 看起来很有说服力。 @MWiesner:不客气。这是一个令人惊喜的惊喜,因为 Java GUI 往往与 90 年代的外观不同。它仍在开发中,2.0 看起来很有希望。【参考方案10】:

Swing 很好(稳定、有文档记录、支持到 2026 年)。问题是它依赖于提供非常有限数量的样板选择的 LookAndFeel 系统。单独更改每个组件的外观应该很容易,然后释放其创造力。不幸的是,这很痛苦。恕我直言,框架应该建立在 Swing 之上,而不是创建 JavaFX。

看看https://github.com/dotxyteam/ReflectionUI。

前图形用户界面:http://javacollection.net/reflectionui/wp-content/uploads/2017/08/general.png

【讨论】:

以上是关于如何创建“现代外观”的 Java 桌面应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

道场的现代外观主题? [关闭]

如何使 Java 桌面应用程序永远不会让系统休眠并在后台运行?

如何分发我的 python 桌面应用程序?

java - 如何在java桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2 DB?

从网页链接打开客户端的桌面应用程序

如何在Java桌面应用程序中停止无限循环以移动鼠标