我可以在JavaFX 8中将CSS样式转换为Image

时间:2016-03-01 19:43:02

标签: javafx-8

我有一个动态创建的窗口启动器,工具栏按钮的样式如下:

SqlServerTransport

我想要做的是将stage.getIcons()。add()设置为存储在此css引用中的图像。但是我无法找到那样做。有没有办法获取这些信息,以便我不需要在我的代码中硬编码对我的图像的引用?

感谢。

2 个答案:

答案 0 :(得分:1)

将CSS应用于场景后,只需使用-fx-background-image方法即可通过属性Node.getBackground().getImages()检索分配给给定节点的图像。

这个简单的测试显示了如何做到这一点。

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Say 'Hello World'");
    btn.setOnAction(e -> System.out.println("Hello World!"));

    VBox box = new VBox(btn);
    box.getStyleClass().add("box");

    StackPane root = new StackPane();
    root.setPadding(new Insets(20));
    root.getChildren().add(box);

    Scene scene = new Scene(root, 300, 250);
    scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();

    Region node = (Region) root.lookup(".box");
    if (node != null) {
        Image image = node.getBackground().getImages().get(0).getImage();
        System.out.println("Image " + image);
    }
}

其中style.css只是:

.box {
    -fx-background-image: url("icon.png");
    -fx-background-size: stretch;
}

请注意,必须在显示舞台后进行此操作。否则,您需要将节点添加到场景中,并在调用查找之前调用root.applyCSS()root.layout()

答案 1 :(得分:0)

您可以创建一个Class ExtendedStage extends Stage,其中包含一个用于保存图片的新StyleableProperty