如何在JavaFX中双向拉伸动态创建的背景图像 问题
我想在JavaFXGUI中设置一个背景图像。 GUI的大小应该可以调整为任意比例,以便我的背景图像必须双向拉伸(同时更改背景图像的宽度和高度之间的比例) 灵感来源于我发现了如何通过css实现这一点:如何在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; } 但是我
.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));