一个GUI应用程序的专业感从何而来?

7

最近我一直在研究php-gtk,并且以前也尝试过使用Java来制作GUI“hello world”应用程序。

然而,这两种类型的应用程序都有一些笨重(几乎幼稚)的外观和感觉。我不能否认它们对于制作公司内部使用的应用程序非常方便(我完全尊重社区为这些项目所付出的努力)。但是如果我想要制作一个外观和感觉类似于Windows Firefox或Adobe XYZ的应用程序,我应该使用什么GUI /语言呢?

“专业光泽”或智能的外观和感觉是否完全取决于设计师,还是说无论设计师有多好,选择正确的GUI框架对于获得那种外观至关重要?


感谢所有这些答案 - 都非常有用的东西。 - JW.
5个回答

7

让软件具有优雅的用户体验需要注意以下几个方面:

  1. 使用最适合平台的本地框架。例如Windows平台使用Win32/WPF,Mac平台使用Cocoa等。
  2. 应用程序的视觉元素要协调一致,包括图片、图形、工具栏图标等。
  3. 遵循平台的指南和最佳实践。

4
这里是我的看法,与Igor的回答有些重叠:
原生控件外观 - UI控件今天具有相当复杂的外观。我们从中直觉地得出许多视觉线索,即使它只是一个带有一些框架的白色矩形,在错误的阴影下看起来很奇怪。上下文菜单通常不仅仅是打开,而是从某个方向滑入或淡入。
原生控件行为 - 比UI更复杂,行为细节很多:根据单击位置不同的上下文菜单,选择或拖动项目时不同的“热区”,键盘快捷键等等。
注重细节 - 在任何平台上都有很多一致的UI行为可以发现。例如,箭头键在树形控件中的工作方式与选择、打开和关闭节点有关。
只需看看Windows:大多数非本机工具包都会在基本键盘导航上出错-箭头键,Home,End,PgUp和PgDown,使用Ctrl修改行为,使用Shift扩展选择可提供32种行为。复制和粘贴传统上是使用Ctrl + C / Ctrl + X / Ctrl + V和Shift + INS,Shift + DEL,缺少一些功能。鼠标双击通常选择一个单词,鼠标三击有时选择一个句子、行或段落。
响应时间和肌肉记忆 - 基本上有两种UI操作模式:
“行动-外观循环”,在这种模式下,您需要等待响应才能决定下一步操作,
“从肌肉记忆中播放”,这种模式速度更快,需要的精神处理资源更少。但是,这需要满足两个要求:响应必须是统一的和“即时的”,下一个操作必须立即正确地注册(至少在10毫秒内)。
然而,对于非本机工具包来说,这通常变得困难,因为响应滞后于一两个操作之后(思维锁定在差异上),并且工具包需要50毫秒或更长时间才能显示菜单,在此期间,单击不会按预期注册。
打磨UI需要很长时间 - 一个好的控件库可以解决大部分控件问题,但还有一些最后的10%需要90%的时间,并且您需要控制交互。您必须尝试不同的方法,您必须期望具有FPS训练过的反应,您必须尝试各种工作流程。
跨平台工具包无法完美地做到这一点 - 它们陷入了进退两难的境地:它们可以选择独立于平台的内部一致性,或者与当前运行的平台保持一致。要做到正确,后者通常需要在调用代码中使用特定于平台的代码,这正是您要避免的实际事情。

3

始终尽量使用与您的桌面环境相同的GUI框架。创建Windows应用程序最好使用.NET库。在GNOME上,GTK+始终是最好的选择,而在KDE上,Qt表现良好 - 尽管这三个框架都可以在彼此的系统上工作,但它们的视觉吸引力会随着缺乏视觉整合而降低。


1
绝对正确。在你的平台上使用本地的外观和感觉。Java应用程序在Windows上总是看起来很糟糕(想想Lotus Notes)。如果你想使用托管语言,那就在Windows上使用.Net吧。 - jwismar
我想指出的是,即使是纯Qt也不能完美地与KDE集成 - 至少在我的电脑上,基于Qt库和基于KDE自己的UI库的界面之间有明显的区别。虽然这有点离题了... - David Z
1
Lotus Notes 最初是用汇编语言编写的... 这就是本地程序的定义。 - L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
我注意到Java应用程序在Windows的主题化方面集成得不太好,但它们在Gnome上几乎完全相同(除了不同的字体反锯齿处理)。 - Delan Azabani

3

GUI API/语言对于UI设计来说完全无关紧要,尽管某些API可以使实现更容易或更快。

良好的UI应该具备以下特点:

  • 好的图形设计/艺术作品(视觉平衡和对称、互补颜色、视觉上“令人愉悦”的形状和布局、在您的应用程序中保持视觉一致性以及与其周围其他应用程序的一致性 - 位置、大小、间隙、颜色等方面的一致性)
  • 了解用户的工作流程,并使他们想要做的事情变得简单和直观。这通常意味着实现3或4种完成同一操作的方式(例如,“复制和粘贴”通常可以通过:主菜单->复制/粘贴、上下文菜单->复制/粘贴、ctrl+c/v、按钮:复制/粘贴、拖放等方式实现)
  • 保持一切简单。尽可能删除多余的内容,将UI缩减为用户所需的内容,而不再多余。
  • 直观且不会让用户感到惊讶。控件应该看起来像用户所知道的控件,工作像用户所知道的控件,并位于计算机的先前使用经验所期望的位置。
  • 遵循惯例(在标准位置放置OK/取消按钮,使用操作系统定义的颜色来突出显示选定的对象等)

要做到这一点,您需要查看许多“好”的应用程序,并剖析它们的优点。请找一个好的艺术家/图形设计师为您绘制好的图标等。并花费大量时间思考用户的工作流程。

确保将业务逻辑与UI分开 - 这将使您轻松地重新设计应用程序以改善UI。通常,程序所需的数据与用户使用应用程序的方式无关 - 不要试图仅在可编辑字段中公开您的x、y、z变量!UI是隐藏您的实现并使其可用的层!


1

我不喜欢Java应用程序GUI通常使用的工具包的外观。如果你喜欢Firefox的外观,你可以研究一下XUL和大多数Mozilla应用程序共享的GUI框架。Komodo Editor/IDE使用相同的工具(以及其他几个应用程序)。GTK非常强大,我真的怀疑它是阻止你的应用程序拥有专业光泽的原因。继续探索它的功能,并重新思考显示组件的最佳方式,我相信你一定会找到更好的解决方案。

另一方面,这并不全是关于工具包。良好的界面设计是一门艺术,像Firefox这样的界面通过无数反馈不断演变。最好的方法是与用户交流,了解什么会让他们更舒适地使用你的应用程序。我发现软件在功能上表现出色时通常看起来也很好。

我建议花费大量时间在你觉得使用愉快的软件中。记录事物的处理方式,并寻找界面元素之间的共性。大多数软件都遵循一套相当普遍的原则,使使用软件更容易,而你越是探索你觉得吸引人的软件,模式就越快地出现。

祝你好运!


感谢您的回复。关于“记录事情的做法”的问题,哈哈,是啊。我开始重新审视我那些可靠的老应用程序——我的屏幕卡尺总是在记录最小调整高度/宽度、框架阴影等各种细节……这一切都非常分散注意力;o) - JW.

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