【问题标题】:How to sync JavaFx and Swing Look and Feel如何同步 JavaFx 和 Swing 外观
【发布时间】:2016-09-03 08:28:39
【问题描述】:

我有嵌入 Swing 组件的 JavaFx 应用程序。 JavaFx 和 Swing 组件的外观和感觉不同。因此,我正在寻找可以解决此问题并提供通用外观的解决方案,以使应用程序看起来更专业并被用户接受。

非常感谢任何帮助。

【问题讨论】:

  • 请详细说明您的问题不清楚您是要使用 JavaFX 还是将该应用程序更改为 JavaFx?
  • 存在一些技术挑战,因此我需要在 JavaFx 中嵌入一些摆动组件。我在 JavaFx 中有 90% 的屏幕,其余的在 Swing 中。我希望问题现在很清楚。
  • 我知道一个在运行时改变 LookAndFeel 的方法,因为客户端机器运行在它上面,但是我的方法不支持 JavaFx 它可以在 Swing 和 Nimbus 之间切换如果你想要并且可以发送代码在这里。
  • 无 VGR,默认情况下 JavaFX 与系统外观不匹配。

标签: java swing javafx look-and-feel


【解决方案1】:

两个选项,目前都没有很好的通用解决方案 IMO:

1.匹配系统观感

在 Swing 中设置 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) 以使 Swing 使用系统外观。

默认情况下,JavaFX 不匹配系统外观,也不了解 Swing UIManager。 JavaFX 有它自己的内置、跨平台的外观和感觉 (Modena in Java 8 and Caspian in Java 7)。您可以使用自定义外观和感觉override the default 平台外观和感觉,有些人甚至为 JavaFX 创建了一些系统外观,例如AquaFX,但没有对所有系统的通用系统外观支持JavaFX 可以运行。

您可以检查您希望支持的平台,看看是否可以找到将 JavaFX 与这些平台的系统外观相匹配的第三方定义。我的猜测是,如果您希望在各种平台上实现高质量的系统外观匹配,那么您将无法获得令人满意的解决方案。

2.将您的 JavaFX UI 与跨平台的 Swing 外观和感觉相匹配

这需要为您的应用程序选择一个跨平台的 Swing 外观,然后为您的 JavaFX 应用程序定义一个用户代理样式表,该样式表将 JavaFX 小部件外观与 Swing 小部件外观相匹配。 JavaFX 基于 CSS 的样式非常灵活。通过一些工作,您可以模拟许多窗口工具包的外观(如 button styling sample 所示)。因此,您当然可以构建一些东西来匹配一些常见的 Swing 外观。

但是,我从未见过有人尝试这样做,对于大量小部件而言,所需的工作并非易事,并且您最终可能会使您的应用程序看起来更糟糕,以匹配您的 Swing 界面如果您改为花费精力使 JavaFX 部分和 Swing 部分看起来更好,或者只是使用默认的 JavaFX 查找 JavaFX 部分,而使用 Swing 查找 Swing 部分。


所以,实际上,您只剩下第三种选择,这是最现实的 IMO:接受您的应用程序的 Swing 部分和应用程序的 JavaFX 部分看起来会有些不同。如果这对您的应用程序来说是不可接受的折衷方案,请将您的应用程序转换为使用单个工具包(Swing 或 JavaFX)来呈现 UI 控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 2011-02-05
    • 2011-02-08
    • 1970-01-01
    • 2011-02-27
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多