Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX如何更改HBox的css_Java_Css_Javafx_Background Image - Fatal编程技术网

JavaFX如何更改HBox的css

JavaFX如何更改HBox的css,java,css,javafx,background-image,Java,Css,Javafx,Background Image,我想更改我得到的不同级别的背景图像: 这是我在使用css时设置背景图像的方法: public void setBackgroundImage(HBox group, String ebene) { switch (ebene) { case "air": { String air_img = GrafikManager.class.getResource("/obkclient/img/Himmelsschlacht.jpg

我想更改我得到的不同级别的背景图像: 这是我在使用css时设置背景图像的方法:

public void setBackgroundImage(HBox group, String ebene) {
        switch (ebene) {
            case "air": {
                String air_img = GrafikManager.class.getResource("/obkclient/img/Himmelsschlacht.jpg").toExternalForm();
                group.getStyleClass().removeAll(); //also tried with getStylsheets()
                group.setStyle("-fx-background-image: url('" + air_img + "');\n"
                        + "-fx-background-size: 1024, 768;\n"
                        + "-fx-background-repeat: stretch;\n"
                );
                break;
            }
            case "sub": {
                String sub_img = GrafikManager.class.getResource("/obkclient/img/Unterwasserschlacht.jpg").toExternalForm();
                group.getStyleClass().removeAll();
                group.setStyle("-fx-background-image: url('" + sub_img + "');\n"
                        + "-fx-background-size: 1024, 768;\n"
                        + "-fx-background-repeat: stretch;\n"
                );
                break;
            }
            default: {
                String image = GrafikManager.class.getResource("/obkclient/img/Seeschlacht.jpg").toExternalForm();
                group.getStyleClass().removeAll();
                group.setStyle("-fx-background-image: url('" + image + "');\n"
                        + "-fx-background-size: 1024, 768;\n"
                        + "-fx-background-repeat: stretch;\n"
                );
                break;
            }
        }
    } 
但如果我开始,我只看到默认的背景图像。 我在以下上下文中使用此方法:

public SubScene buildFieldBackground(Scene scene){
        PerspectiveCamera subSceneFieldCamera = new PerspectiveCamera(false);
        scene.setCamera(subSceneFieldCamera);
        HBox subSceneGroup2 = new HBox();
        setBackgroundImage(subSceneGroup2, currentEbene);
        subSceneGroup2.setPadding(new Insets(0, 0, 0, 0));
        SubScene subScene2 = new SubScene(subSceneGroup2, 1024, 768);
        subScene2.setLayoutX(100);
        subScene2.setLayoutY(100);

        return subScene2;
    }
CurrentEbene可以获得以下统计信息(通过其他方法设置):“空气”、“海洋”、“潜水”


我还没有发现错误在哪里。请提供帮助。

我实际上建议为此使用外部样式表,并根据“级别”变量操作样式类。你可以做:

public void setBackgroundImage(HBox group, String ebene) {
    ObservableList<String> styleClass = group.getStyleClass();
    styleClass.setAll("hbox-group", ebene);
}


public SubScene buildFieldBackground(Scene scene){
        PerspectiveCamera subSceneFieldCamera = new PerspectiveCamera(false);
        scene.setCamera(subSceneFieldCamera);
        HBox subSceneGroup2 = new HBox();

        subSceneGroup2.getStylesheets().add(getClass().getResource("subscene.css").toExternalForm());

        setBackgroundImage(subSceneGroup2, currentEbene);
        subSceneGroup2.setPadding(new Insets(0, 0, 0, 0));
        SubScene subScene2 = new SubScene(subSceneGroup2, 1024, 768);
        subScene2.setLayoutX(100);
        subScene2.setLayoutY(100);


        return subScene2;
    }

注意
group.getStyleClass().removeAll()什么都不做:您可能是指
group.getStyleClass().clear(),尽管我认为这不会有任何区别。你能澄清一下吗;您是否从
开关中的
默认
框中获取图像(即
中的图像请参见schlacht.jpg
)?如果是这样,则输入一个
System.out.println(ebene)
in检查传递的内容。一开始我设置currentEbene=“sea”。因此,我认为默认情况将首先得到解决。我得到了解决方案!在设置背景之前,我有一个线程异常。我不能发布正确的代码,因为我没有足够的分数。但是如果我联系到他们,我会更新我的解决方案!
.hbox-group {
    -fx-background-size: 1024, 768;
    -fx-background-repeat: stretch;
    -fx-background-image: url('/obkclient/img/Seeschlacht.jpg') ;
}
.air {
    -fx-background-image: url('/obkclient/img/Himmelsschlacht.jpg') ;
}
.sea {
    -fx-background-image: url('/obkclient/img/Unterwasserschlacht.jpg') ;
}