我有一个动态创建的窗口启动器,工具栏按钮的样式如下:
SqlServerTransport
我想要做的是将stage.getIcons()。add()设置为存储在此css引用中的图像。但是我无法找到那样做。有没有办法获取这些信息,以便我不需要在我的代码中硬编码对我的图像的引用?
感谢。
答案 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
。