我有 JavaFx 应用程序,其中嵌入了 swing 组件。 JavaFx 和 Swing 组件的外观不同。所以我正在寻找可以解决这个问题并提供通用外观的解决方案,以便应用程序看起来更专业并被用户接受。
非常感谢任何帮助。
最佳答案
两个选项,目前 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 部分看起来会有些不同。如果这对您的应用程序来说是 Not Acceptable 妥协,请将您的应用程序转换为使用单个工具包(Swing 或 JavaFX)来呈现 UI 控件。
关于java - 如何同步 JavaFx 和 Swing 外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103316/