2014-04-24 98 views
0

我想更改背景图片的不同层次,我得到: 这是我的了Methode同时使用CSS来设置背景图片:JavaFX的如何更改CSS的与HBox

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; 
      } 
     } 
    } 

但是,如果我只是开始我请参阅默认的BackgroundImage。 我在以下环境中使用此了Methode:

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可以得到以下统计数据(由其他了Methode设置):“空气”,“海”,“子”

在哪里这个错误我没有找到,但。请帮忙。

+0

注意'group.getStyleClass()的removeAll();'没有做任何事情:你大概是这个意思'group.getStyleClass()。clear();',但我认为它不会有什么区别。你能澄清一下吗?你是否从'switch'中的'default'案例(即'Seeschlacht.jpg'中的图像)获取了图像?如果是这样,放一个'System.out.println(ebene);'来检查传递的是什么。 –

+0

在开始我设置currentEbene =“海”。 所以我认为默认情况会先得到。 – malex

+0

我得到解决方案!在设置背景之前,我有一个线程异常。我无法发布正确的代码,因为我没有足够的分数。 但是,如果我达到他们,我会更新我的解决方案! – malex

回答

2

我实际上会建议使用外部样式表,并根据您的“level”变量操作样式类。你可以这样做:

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; 
    } 

然后

subscene.css:

.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') ; 
}