专业人士如何在Java中制作GUI界面?

19
感谢您对我之前关于Java GUI的问题的回答。我现在想知道专业人士在设计“真实”应用程序时选择的漂亮GUI的解决方案是什么。您是否使用Swing和JComponents并只更改“外观和感觉”?您更喜欢awt还是其他库?抱歉,如果这个问题听起来很奇怪,我是一名学生,我不太了解Java在现实世界中的应用...

2
@Jules Olléon:我发售使用Java编写的商业软件,可在Windows、OS X和Linux上运行。我使用Swing和IntelliJ的GUI编辑器(它非常好,因为它会自动隐藏许多毫无意义且冗长乏味的Swing代码),以及一些定制的组件(这些组件在每个平台上都能够100%地正常工作)。例如,自定义双/三/四进度条,自定义“按键即找”列表(类似于Google用于搜索建议的那种),以及一些特定于我的问题领域的高级自定义组件。 - SyntaxT3rr0r
@WizardOfOdds:你在Windows和Linux上使用哪种LaF?你是使用Windows和GTK样式还是Swing默认样式? - Jonas
@Jonas:在Windows上,我们为用户提供了默认的Swing布局和Nimbus之间的选择。在Linux上,默认情况下是Swing,无论它是什么:但有很多问题(包括在SO上的很多问题)。例如,我们有“可关闭选项卡”,我们必须在1.5下运行。因此,我们有自己的选项卡渲染器等。这是一个充满不兼容性的狂野世界 :) 软件在Linux上可以工作,我们开发人员确实在Linux上开发和测试它,但我们只在OS X和Windows上销售 :) - SyntaxT3rr0r
@WizardOfOdds:谢谢,那些是有见地的评论。 - Jonas
@SyntaxT3rr0r,您提供的链接只是指向Oracle的Java主页。 - Ungeheuer
显示剩余2条评论
7个回答

9
在我们公司中,我们使用Swing,因为它被JVM原生支持,但是我们确实为某些面板和按钮使用彩色背景颜色。如果我们使用不同的框架,例如SWT或 Jambi,我们也必须在所有平台上推出这些框架,并为所有操作系统和(受支持的)Java版本测试这些框架。这一点有点不好。然而,使用Swing创建一个漂亮的响应式应用程序相当棘手;所以你真的需要使用SwingWorker等工具。然而,有了一点经验,你可以用这种方式创建一个漂亮的应用程序。即使它不是开发速度最快的框架,与定义用户界面的功能需求、测试和发布版本时的支持相比,开发时间真的很短。话虽如此,我们的目标是桌面端。如果你的目标是移动设备或者还需要一个Web前端,你的选择可能会有所不同。

4

我不相信还有人喜欢AWT。11年前,Swing完全替代了它,并在其基础上纠正了AWT 1.0设计中的缺陷。

Swing并不是专业人士制作Java UI的唯一方式。对于桌面端,可以使用JavaFX。而对于Web端,则需要使用HTML、CSS、JavaScript和JSP构建UI。


2
求求你,不要使用AWT!作为Web应用程序开发具有许多优点,其中最重要的是更容易部署。 - Stephen
@Stephen AWT GUI和Web应用程序完全不同。这取决于你想做什么。然而,Swing比AWT更有优势,尽管AWT包仍用于事件处理。 - aduric
@aduric,我并不是想把它们看作是一样的。我只是在陈述两件事情:1)awt GUI很糟糕,2)Web应用程序有许多优点。但是,GUI和Web应用程序并不完全不同,通常你可以在Web应用程序中本地完成大部分想做的事情。 - Stephen
对于网络应用程序,GWT也是一个很好的平台 - 特别是如果您已经了解Swing。 - Romain Hippeau

1

我的经验是,大多数想要创建丰富GUI的组织仍然使用Swing,并手动处理所有布局管理器等烦恼。

使用SWT的范围相当有限,仅限于使用Eclipse RCP作为平台的组织。我不确定为什么它在这个平台之外没有流行起来。

很遗憾,Java Swing GUI通常看起来不太好,除非您花费大量时间为它们创建更本地的感觉。即使如此,它们经常在美学上输给专门为Windows编写并使用Window API(如WinForms)的等效程序。


你应该尝试一下Netbeans中的GUI设计工具! - Thorbjørn Ravn Andersen
将UIManager设置为系统类确实在Windows上非常好。一切看起来几乎与本机Windows应用程序相同。有一些微小的差异(主要是在AWT组件中),但Swing很好地模拟了本机外观。 - bgroenks

1

1

我们通常使用Swing,因为它在标准JRE中支持开箱即用。通常我们在Netbeans中进行初始表单设计和事件连接,然后将其导出到任何我们希望的地方,例如Eclipse。

Netbeans使用标准库(加上一两个必须包含的jar文件)生成纯Java代码,因此在Netbeans中设计表单并稍后转移到其他工具中并不是什么大问题。

有些人建议使用布局管理器手动进行表单布局。我认为只有在您正在做一些需要长期维护的大型项目时才考虑这种选项。否则,这只是太耗费时间而不值得。


1

我们在Java GUI中依赖于SWT。是的,您必须包含外部本地库,但外观和感觉是本地的,更加响应(尽管Swing在过去几年中变得更快),并且与目标平台上的其他应用程序无缝集成。


0

Macintosh OS X 创建了自己的 Java 运行时。他们为 Swing 组件提供了与本地应用程序相同的外观和感觉。

我严格使用 Swing。我通过 Web Start 分发“真正”的桌面应用程序,供 Mac 和 Windows 使用者使用并与用户的智能卡读卡器进行接口交互。

NetBeans IDE 提供了一种所见即所得的方式来创建表单。我已经尝试过它,它非常不错,但我们仍然使用 Eclipse 作为我们的 IDE,并通过代码设计表单。


1
NetBeans的所见即所得编辑器真是一场噩梦。如果你有能力,我建议使用JFormDesigner,或者手动使用布局管理器完成。起初可能需要更多的工作,但从长远来看,你会拥有更多的控制权。 - cdmckay
抱歉,它不是这样的。您完全控制放置在哪里以及所有属性、绑定等等。您只需要知道在哪里查找。 顺便说一下:据我所知,MacOSX 使 AWT 看起来像 MacOS Aqua,而不是 Swing。 - Tedil
1
@Tedil,我做了一些研究,似乎Mac OS X使AWT和Swing看起来像Aqua。我们肯定使用Swing,并且它确实看起来像Aqua。 - Marcus Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接