2014-04-24 64 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') ; 
}