样式化JavaFX Popover

时间:2014-12-16 20:35:18

标签: javafx controlsfx

我需要从ControlsFX设置一个Popover样式,但我没有这样做。

我有自己的xxx.css样式表,我添加到一个场景中,我(显然)成功地设置了许多JavaFX控件的样式......

我在样式表中设置了这个(从ControlsFX中的popover.css复制和修改):

.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永远不会获得边境风格。如何让Popover选择风格?

1 个答案:

答案 0 :(得分:4)

由于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());