2016-06-10 1 views
0

Я хочу установить фоновое изображение панели на изображение, которое пользователь выбирает через filechooser в javafx. Кто-нибудь знает как это сделать? Вот мой код:изменение фонового изображения во время выполнения с 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

Используйте этот метод, чтобы установить Background в виде Region в образ данного в качестве 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 
    ))); 

} 

В качестве альтернативы для изображения натянута до размера Region Используйте BackgroundFill с ImagePattern:

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