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

     2023-02-26     277

关键词:

【中文标题】如何创建“现代外观”的 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桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2 DB?

】java-如何在java桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2DB?【英文标题】:HowtocreateemdeddedH2DBwithspring(transactional)andhibernateinjavadesktopapplication?【发布时间】:2016-10-2611:25:15【问题描述】:我正在尝试创建一个带有... 查看详情

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

我正在尝试创建一个桌面程序来移动鼠标,直到我按下java中的字母“q”。我创建了一个窗口(JFrame),当我按下按钮时,鼠标开始移动。我的疑问与这部分有关:while(true){for(intj=1500;j<1600;j++){robot.mouseMove(j,0);robot.delay(100);}}如... 查看详情

对话框在时间设计上具有现代外观,但在运行时具有旧外观(使用 Visual C++ 和资源编辑器)

...6-2207:37:01【问题描述】:我正在使用VisualC++的资源编辑器创建一个对话框。当我运行编辑器的测试按钮时,对话框的组件以现 查看详情

分布式 Java 桌面应用程序 mySQL 数据库

】分布式Java桌面应用程序mySQL数据库【英文标题】:DistributedJavadesktopappmySQLdatabase【发布时间】:2015-09-2621:52:38【问题描述】:我目前正在学习Java和Swing,并且正在尝试创建一个桌面应用程序。作为这个应用程序的一部分,我已... 查看详情

如何创建类似于 Blender 或 Maya 的桌面 GUI 应用程序?

】如何创建类似于Blender或Maya的桌面GUI应用程序?【英文标题】:HowcanIcreateadesktopGUIapplicationsimilartoBlenderorMaya?【发布时间】:2019-04-2108:02:22【问题描述】:我想创建一个类似于Blender或MayaGUI窗口的自定义图形用户界面窗口。请参... 查看详情

如何正确设置浏览器创建的桌面通知的关闭超时

...:00:24【问题描述】:我正在使用标准NotificationAPI为我的Web应用程序处理桌面通知。出于我最初开发的目的,我使用的是GoogleChrome。在Chrome中,当页面创建Notifi 查看详情

html如何编写为桌面程序

学过/用过HTML的人应该都知道HTML是标记语言,是在网页上执行/使用的,在这里小编告诉你HTML也可以用来做桌面程序,这种桌面程序一般是微客户端工具/原料 htmldreamweaver方法/步骤 打开dreamweaver点击->文件->新建点击-&... 查看详情

Kivy 创建桌面程序?

...-1816:32:01【问题描述】:Kivy似乎非常适合平板电脑和手机应用程序,但我想知道它如何扩展到桌面应用程序?除了外观(看标准的灰色按钮,黑色背景上的白色标签......:但这些显然可以改变),我看到桌面程序的其他问题:-... 查看详情

如何创建桌面应用程序

  上次我们创建了控制台应用程序,今天我们就谈谈如何创建桌面应用程序。  第一步、我们打开VS2017,出现如下界面(此界面前面我们已讲过,这里就不再谈论了):  第二步、单击“文件(F)--->新... 查看详情

如何在 Windows 中为桌面创建 kivy 应用程序?

】如何在Windows中为桌面创建kivy应用程序?【英文标题】:HowtocreatekivyapplicationsfordesktopinWindows?【发布时间】:2021-07-1907:07:08【问题描述】:大家下午好。再次尝试在WINDOWS10上为DESKTOP打包kivy,但无济于事!我有很多错误,我设法... 查看详情

java示例代码_Swing桌面应用程序-如何组织我的代码

java示例代码_Swing桌面应用程序-如何组织我的代码 查看详情

如何在ubuntu桌面创建应用启动器

在Ubuntu桌面创建应用启动器的步骤:    首先程序分为两类:一个是系统自带程序,另一个是用户后来安装的程序,无论是哪类程序它们的启动器都是放在/usr/share/applications这个目录里。所以要做的就是把想要放在... 查看详情

如何从客户端桌面应用程序向服务器端 Spring 应用程序发出请求?

】如何从客户端桌面应用程序向服务器端Spring应用程序发出请求?【英文标题】:Howtodorequeststoaserver-sideSpringappfromaclient-sidedesktopapp?【发布时间】:2016-03-0511:13:26【问题描述】:我们将创建一个客户端-服务器端应用程序,其中客... 查看详情

使用 dbms_alert 的 Java 桌面应用程序

】使用dbms_alert的Java桌面应用程序【英文标题】:JavaDesktopapplicationusingdbms_alert【发布时间】:2013-05-1611:56:09【问题描述】:我想创建一个小型Java桌面应用程序,当它在oracle数据库中找到新记录时显示通知。我不希望所有桌面客... 查看详情

桌面快捷方式如何创建如何创建桌面快捷方式

参考技术A通过添加软件位置创建桌面快捷方式。1、在桌面右击点击“新建”,点击“创建快捷方式”。2、点击“浏览”,任意选择软件的图标,浏览需要创建的快捷方式。3、输入快捷方式的名称,点击完成,就成功创建了软... 查看详情

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

】如何使Java桌面应用程序永远不会让系统休眠并在后台运行?【英文标题】:HowtomakeJavadesktopapplicationthatneverletsthesystemsleepandrunsinbackground?【发布时间】:2020-09-1422:45:59【问题描述】:我是Java编程的新手,我知道Java的基本语法并... 查看详情

如何使用 Windows 登录进行单点登录和桌面 Java 应用程序的 Active Directory 条目?

】如何使用Windows登录进行单点登录和桌面Java应用程序的ActiveDirectory条目?【英文标题】:HowtouseWindowsloginforsingle-sign-onandforActiveDirectoryentriesforDesktopJavaapplication?【发布时间】:2010-10-0710:28:30【问题描述】:我想让我的桌面Java应... 查看详情

如何在 Windows 桌面上创建暴风雪?

】如何在Windows桌面上创建暴风雪?【英文标题】:HowtocreateasnowstormonyourWindowsdesktop?【发布时间】:2011-06-0704:39:35【问题描述】:抛开实际用途不谈,如何(如果可能的话)在运行Windows的台式PC上创建“下雪”效果?最好只使用... 查看详情