如何同步JavaFx和Swing外观

时间:2016-05-08 18:25:31

标签: java swing javafx look-and-feel

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

任何帮助都非常适合。

1 个答案:

答案 0 :(得分:1)

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

1。匹配系统外观

在Swing set 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应用程序定义一个用户代理样式表,该样式表与Swing小部件外观相匹配。基于JavaFX CSS的样式非常灵活。通过一些工作,您可以模拟许多窗口工具包外观(如此button styling sample所示)。所以,你当然可以建立一些东西来匹配一些常见的Swing外观。

但是,我从未见过有人试图这样做,所需的工作对于大量的小部件来说都是非常重要的,你最终可能会使你的应用程序整体上看起来有点糟糕,以匹配你的Swing接口然后如果您花了相同的努力使JavaFX部分和Swing部分看起来更好,或者仅使用默认的JavaFX查找JavaFX部分和Swing查找Swing部分。

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