如何在JavaFX

时间:2016-01-01 13:17:46

标签: java user-interface javafx-8

问题

我想在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;");

问题

我很欣赏我可以走得更远的想法。

1 个答案:

答案 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));