【发布时间】:2010-11-13 00:58:06
【问题描述】:
我是编程新手,但我正准备编写 Java 程序。正如我正在计划的那样,我正在尝试为它找到合适的 GUI。我找到了带有 GUI 选项的 this 页面。我有两个问题:
- 这些只是插入到 Java GUI 构建器中吗?
- 在构建程序后更改 GUI 外观和感觉有多容易(或难)?
【问题讨论】:
标签: java user-interface
我是编程新手,但我正准备编写 Java 程序。正如我正在计划的那样,我正在尝试为它找到合适的 GUI。我找到了带有 GUI 选项的 this 页面。我有两个问题:
【问题讨论】:
标签: java user-interface
忽略选择外观 (LAF) 的优缺点,我将添加一些使用它们的经验...
如果您使用第三方/cots 组件库(JIDE、SwingLabs/SwingX 等),您将遇到问题,因为 UI 类不会始终存在或与所有 LAF 保持同步。 JIDE 支持一些外部 LAF(Alloy 和 Synthetica)。一些 LAF 还提供对小部件的支持; Substance 支持一些 JIDE 和 SwingX。最终结果是一个部分蒙皮的应用程序。不漂亮。确保您的 LAF 支持您的所有组件。如果你是纯 Swing/AWT,没问题。
鉴于此,我们使用 Alloy 来支持 JIDE,并考虑迁移到 Synthetica。我们很想使用 Substance,但它没有任何 JIDE 支持。
【讨论】:
根据 Uri 所说的,您可能希望坚持使用其中一种更为知名的外观和感觉。
如果您使用 Swing,您可能需要考虑使用 Nimbus 外观和感觉...它包含在 Java 6u10 和更新版本中。 Nimbus 建立在 Java 5 和更新版本中包含的 Synth 框架之上。
当然,如果最终用户使用的是较低版本,它将抛出 UnsupportedLookAndFeelException 并默认为 JVM 默认值(通常是 Metal/Ocean(跨平台)主题)。
附带说明,如果您使用 Swing,则可以动态切换正在使用的外观。你只需要打电话
// "lnfName" is the look and feel name.
// "frame" is the window's JFrame.
// A try/catch block is omitted here.
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
【讨论】:
更改程序的外观和感觉很简单:
UIManager.setLookAndFeel("fully qualified name of look and feel");
在创建任何 GUI 创建代码之前。因此,您可以使用 GUI 构建器轻松创建所有 GUI,然后只需在程序开始时调用它即可。
(请注意,某些外观和感觉,例如 Substance,在涉及线程问题时非常严格,因此您最好确保所有 GUI 代码都从事件调度线程运行。)
作为一个建议,在我看来,两个非常好看(而且足够专业)的外观和感觉是 Substance 和 Nimbus,它们将随 JRE 的后续版本一起提供作为默认外观(至少这是计划),可以从 java.net 单独下载。
因此,如果您选择 Nimbus,代码将是:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
Substance 的一个示例(Substance 有许多皮肤和主题,如果您想了解更多信息,请阅读他们网站上的文档):
UIManager.setLookAndFeel(new org.jvnet.substance.skin.SubstanceBusinessBlackSteelLookAndFeel());
另请注意,您可以像这样使用跨平台皮肤(金属):
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
最后,如果你在 Windows 上,你可以使用这样的系统外观:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
【讨论】:
一般来说,带有“观感”的第三方 GUI 库不是很受欢迎,这可能是它们质量的一个标志。
标准 GUI 库本质上非常复杂,虽然它们支持一些外观和感觉调整,但这些调整通常很小或受到限制。
我建议坚持使用 Swing 或 SWT,看看你能用它们的外观和感觉机制做什么,但不要指望奇迹。
【讨论】: