java - 如何同步 JavaFx 和 Swing 外观

标签 java swing javafx look-and-feel

我有 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/

相关文章:

java - 在亚马逊云搜索上上传文件?

java - 组织.openqa.selenium.StaleElementReferenceException : WebElement is stale

java - 删除重复字符串 |正则表达式 |模式匹配器

java - JFileChooser 上的系统外观布局,但带有 nimbus 外观主题

java - 在 JavaFX 的 DatePicker 中设置一周的第一天

java仅获取treeItem的children值

java - 在 JRE 8 中使用 JavaFX, “Access restriction” 错误

java - 使用 Canvas 和计时器绘图

未识别该类型的 Java 方法

java - 如何在 UI 窗口中通过来自主类的消息显示消息?