JavaFX如何更改HBox的css
我想更改我得到的不同级别的背景图像: 这是我在使用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
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') ;
}