将自定义主题应用到ChoiceBox时,JavaFX出现java错误
这不是一个具体的问题
打开NetBeans,创建一个新的FXML项目,打开SceneBuilder并添加一个新的ChoiceBox
关闭SceneBuilder,运行项目。选择框出现了,没问题
问题是当我应用像Win7Glass这样的CSS样式表或使用AeroFX样式时。让我惊讶的是,ChoiceBox
现在消失了。在按钮和其他控件中,它运行良好
但如果我使用AquaFX样式,效果会很好
而且,当我在SceneBuilder中选择win7glass CSS时,它完全适用于ChoiceBox
我的应用程序有一个主题切换器,当你选择这些主题时,选择框就会消失
问题的核心是,当应用AeroFX或win7glss主题时,选择框会消失。有人知道为什么吗
# 1 楼答案
在SceneBuilder上打开FXML文件时,对于AeroFX,请使用win7。css不包含类
choice-box
,您可以看到应用的默认modena样式但是AeroFX的问题是它没有定制的
ChoiceBox
控件,当你在代码AeroFX.style()
中应用时,没有皮肤AeroChoiceBoxSkin
,如果没有皮肤应用,它就会“消失”而在AquaFX中有一个
AquaChoiceBoxSkin
类,当您使用AquaFx.style()
设置应用程序的样式时,它就会工作编辑
如果你看看
AeroFX.style()
在源代码中是如何工作的,它就是这样做的:根据
setUserAgentStylesheet
的JavaDoc:这种方法的问题在于win7中没有包含的控件。css,比如
ChoiceBox
:它们保留默认的皮肤(com.sun.javafx.scene.control.skin.ChoiceBoxSkin
),使用默认的样式选择器,比如open-button
,arrow
。。。应用蒙皮时,css文件中找不到这些样式,不会应用任何样式,控件也不可见(尽管已显示)相反,当您使用Scene Builder打开FXML文件时,您并没有覆盖user agent样式表,您只是添加了一个样式表,该样式表可能仅覆盖提供的样式类上的默认样式表,并保留未包含的控件的默认样式表(modena)。这就是为什么您会看到
ChoiceBox
但是使用默认的modena样式尝试在不调用
AeroFX.style()
的情况下运行应用程序,您将看到带有modena样式的选择框,如果您有按钮、文本字段、复选框,。。。这些将采用windows 7风格