2016-03-01 3 views
0

У меня есть окно запуск, который создается динамически и кнопка панели инструментов оформлена со следующей CSS, например:Можно ли преобразовать стиль CSS к изображению в JavaFX 8

.toolbar-button-open-notepad { 
    -fx-background-image: url("../images/buttons/notebook_edit.png"); 
    -fx-background-size: 24,24; 
    -fx-background-position: center center; 
    -fx-background-repeat: no-repeat; 

    -fx-min-width:24; 
    -fx-min-height:24; 
    -fx-pref-height:24; 
    -fx-pref-width:24; 
    -fx-max-height:24; 
    -fx-max-width:24; 
} 

То, что я хотел бы сделать устанавливается stage.getIcons(). add() на изображение, сохраненное в этой ссылке css. Однако я не смог найти это. Есть ли способ получить эту информацию, так что мне не нужно жестко ссылаться на мои изображения в моем коде?

Спасибо.

ответ

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() перед вызовом поиска.

0

Вы можете создать Class ExtendedStage extends Stage, который содержит новый StyleableProperty, который содержит изображение.

Смежные вопросы