如何在JavaFX中双向拉伸动态创建的背景图像 问题

如何在JavaFX中双向拉伸动态创建的背景图像 问题,java,user-interface,javafx-8,Java,User Interface,Javafx 8,我想在JavaFXGUI中设置一个背景图像。 GUI的大小应该可以调整为任意比例,以便我的背景图像必须双向拉伸(同时更改背景图像的宽度和高度之间的比例) 灵感来源于我发现了如何通过css实现这一点: .root { -fx-background-image: url('http://icons.iconarchive.com/icons/iconka/meow/256/cat-box-icon.png'); -fx-background-size: stretch; } 但是我

我想在JavaFXGUI中设置一个背景图像。 GUI的大小应该可以调整为任意比例,以便我的背景图像必须双向拉伸(同时更改背景图像的宽度和高度之间的比例)

灵感来源于我发现了如何通过css实现这一点:

.root {
    -fx-background-image: url('http://icons.iconarchive.com/icons/iconka/meow/256/cat-box-icon.png');
    -fx-background-size: stretch;
}
但是我有一个约束,即我的背景图像是作为
缓冲图像
动态创建的

第一种方法 因此,我开始通过代码而不是css设置背景图像,如下所示:

Region region = // ...
BufferedImage bufferedBackgroundImage = // ...
WritableImage fxImage = new WritableImage(bufferedBackgroundImage.getWidth(), bufferedBackgroundImage.getHeight());
SwingFXUtils.toFXImage(bufferedBackgroundImage, fxImage);

region.setBackground(
    new Background(
        new BackgroundImage(
            fxImage,
            BackgroundRepeat.NO_REPEAT,
            BackgroundRepeat.NO_REPEAT,
            BackgroundPosition.DEFAULT,
            new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, false, false, false, true))));
不幸的是,我的背景不再延伸。 我在BackgroundSize和BackgroundRepeat常量中尝试了几种布尔值组合,但我只能在一个方向而不是两个方向上拉伸背景图像

第二种方法 我尝试用第一种方法的代码设置背景图像,然后用

region.setStyle("-fx-background-size: stretch;");
但随后背景图像完全消失了。我想这是因为
setStyle
而不是
addStyle
,所以我覆盖了它

下面的代码也不起作用。我认为这是因为你只能将URL设置为css文件,而不能设置样式

region.getStylesheets().add("-fx-background-size: stretch;");
问题:
我希望能有更多的想法。

我也有同样的问题,但后来发现可以用背景填充创建背景。所以,用你的图像创建一个背景填充,然后用它来创建背景

Region region = // ...

Image image = new Image("/chart.png");
BackgroundFill backgroundFill = new BackgroundFill(new ImagePattern(image), CornerRadii.EMPTY, Insets.EMPTY);
region.setBackground(new Background(backgroundFill));