如何创建“现代外观”的 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
关联。如果您的应用在后台运行,则可以通过单击图标并再次执行上述调用来“显示”用户界面。
现代应用程序:将浏览器用于本地应用程序是 Adobe 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】:我对@987654321@ 有很好的体验。
它易于安装、跨平台、无外部依赖、开源(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 桌面应用程序永远不会让系统休眠并在后台运行?