2014-12-16 2 views
1

Мне нужно создать Popover из ControlsFX, но я не могу этого сделать.Styling JavaFX Popover

У меня есть собственный xxx.css таблицы стилей, которые я добавить к сцене, и я (очевидно) успешно стилизации много управления JavaFX ...

Я поставил это в таблице стилей (скопировать и редактировался popover.css в ControlsFX):

.popover > .border { 
    -fx-stroke: linear-gradient(to bottom, rgba(0,0,0, .3), rgba(0, 0, 0, .7)); 
    -fx-stroke-width: 0.5; 
    -fx-fill: rgba(30 , 30, 30, .95); 
    -fx-effect: dropshadow(gaussian, rgba(0,0,0,.2), 10.0, 0.5, 2.0, 2.0); 
} 

Но Поповер никогда не получает стиль границы. Как заставить Popover выбрать стиль?

ответ

3

Поскольку PopOver отображается в другом окне, вы не можете установить свой стиль в основной сцене, а в элементе управления PopOver.

Если вы посмотрите на то, как стиль применяется к элементу управления в своем классе кожи PopOverSkin:

stackPane = new StackPane(); 
stackPane.getStylesheets().add(
      PopOver.class.getResource("popover.css").toExternalForm()); 
stackPane.getStyleClass().add("popover"); 

где это stackPane могут быть доступны с:

@Override 
public Node getNode() { 
    return stackPane; 
} 

вам просто нужно, чтобы добавить свой таблицы стилей в эту стек стек, сразу после того, как у вас есть доступ к коже, то есть, когда отображается popOver:

popOver.show(...); 

((Parent)popOver.getSkin().getNode()).getStylesheets() 
    .add(getClass().getResource("MyPopOver.css").toExternalForm()); 
+0

Работает отлично. Спасибо! – user2499946