有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将自定义主题应用到ChoiceBox时,JavaFX出现java错误

这不是一个具体的问题

打开NetBeans,创建一个新的FXML项目,打开SceneBuilder并添加一个新的ChoiceBox

关闭SceneBuilder,运行项目。选择框出现了,没问题

问题是当我应用像Win7Glass这样的CSS样式表或使用AeroFX样式时。让我惊讶的是,ChoiceBox现在消失了。在按钮和其他控件中,它运行良好

但如果我使用AquaFX样式,效果会很好

而且,当我在SceneBuilder中选择win7glass CSS时,它完全适用于ChoiceBox

我的应用程序有一个主题切换器,当你选择这些主题时,选择框就会消失

截图:click here for images

问题的核心是,当应用AeroFX或win7glss主题时,选择框会消失。有人知道为什么吗


共 (1) 个答案

  1. # 1 楼答案

    在SceneBuilder上打开FXML文件时,对于AeroFX,请使用win7。css不包含类choice-box,您可以看到应用的默认modena样式

    但是AeroFX的问题是它没有定制的ChoiceBox控件,当你在代码AeroFX.style()中应用时,没有皮肤AeroChoiceBoxSkin,如果没有皮肤应用,它就会“消失”

    而在AquaFX中有一个AquaChoiceBoxSkin类,当您使用AquaFx.style()设置应用程序的样式时,它就会工作

    编辑

    如果你看看AeroFX.style()在源代码中是如何工作的,它就是这样做的:

    public static void style(){
        Application.setUserAgentStylesheet(
            AeroFX.class.getResource("win7.css").toExternalForm());
    }
    

    根据setUserAgentStylesheet的JavaDoc:

    Set the user agent stylesheet used by the whole application. This is used to provide default styling for all ui controls and other nodes.

    这种方法的问题在于win7中没有包含的控件。css,比如ChoiceBox:它们保留默认的皮肤(com.sun.javafx.scene.control.skin.ChoiceBoxSkin),使用默认的样式选择器,比如open-buttonarrow。。。应用蒙皮时,css文件中找不到这些样式,不会应用任何样式,控件也不可见(尽管已显示)

    相反,当您使用Scene Builder打开FXML文件时,您并没有覆盖user agent样式表,您只是添加了一个样式表,该样式表可能仅覆盖提供的样式类上的默认样式表,并保留未包含的控件的默认样式表(modena)。这就是为什么您会看到ChoiceBox但是使用默认的modena样式

    尝试在不调用AeroFX.style()的情况下运行应用程序,您将看到带有modena样式的选择框,如果您有按钮、文本字段、复选框,。。。这些将采用windows 7风格