2016-06-10 168 views
0

我想將窗格的背景圖像設置爲用戶通過javafx中的filechooser選擇的圖像。有誰知道如何做到這一點? 這裏是我的代碼:使用javafx在運行時更改背景圖像

ImageView backgroundImageView = new ImageView(); 
backgroundImageView.setId("backgroundImageView"); 
FileChooser fileChooser = new FileChooser(); 
fileChooser.setInitialDirectory(new File(new File("src\\backgrounds").getAbsolutePath())); 
fileChooser.setTitle("select background image"); 
Button openButton = new Button("select background image..."); 
openButton.setOnAction(
     e -> { 
      File file = fileChooser.showOpenDialog(main.getPrimaryStage()); 
      if (file != null) { 
       try { 
        root.setStyle("-fx-background-image: url(\'" + file.toURI().toURL().toString() + "\');-fx-background-position: center center;-fx-background-repeat: stretch;"); 
        //root.setBackground(new Background(new BackgroundImage(new Image(file.toURI().toURL().toString()))));//terrible errors! 
       } catch (MalformedURLException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     }); 
vBox.getChildren().add(openButton); 

回答

1

使用此方法的RegionBackground設置爲給出File一個形象:

static void setBackgroundImage(File file, Region region) throws MalformedURLException { 
    Image image = new Image(file.toURI().toURL().toExternalForm()); 
    region.setBackground(new Background(new BackgroundImage(
      image, 
      BackgroundRepeat.NO_REPEAT, 
      BackgroundRepeat.NO_REPEAT, 
      BackgroundPosition.CENTER, 
      BackgroundSize.DEFAULT 
    ))); 

} 

或者爲streched到Region使用一個大小的圖像BackgroundFillImagePattern

region.setBackground(new Background(new BackgroundFill(new ImagePattern(image), CornerRadii.EMPTY, Insets.EMPTY)));