我想在JavaFX GUI中设置背景图像。 GUI应该可以调整为任何比例,以便我的背景图像必须在两个方向上拉伸(同时改变背景图像的宽度和高度之间的比率)
受another stackoverflow post的启发我发现如何通过css:
执行此操作.root {
-fx-background-image: url('http://icons.iconarchive.com/icons/iconka/meow/256/cat-box-icon.png');
-fx-background-size: stretch;
}
但我有约束,我的背景图片是动态创建的BufferedImage
。
因此,我首先按代码设置我的背景图像而不是像这样的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;");
我很欣赏我可以走得更远的想法。
答案 0 :(得分:0)
我遇到了同样的问题,但是后来发现可以使用BackgroundFill创建Background。因此,用您的图片创建一个BackgroundFill,然后使用它来创建背景。
Region region = // ...
Image image = new Image("/chart.png");
BackgroundFill backgroundFill = new BackgroundFill(new ImagePattern(image), CornerRadii.EMPTY, Insets.EMPTY);
region.setBackground(new Background(backgroundFill));