1

我需要从 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 选择样式?

4

1 回答 1

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());
于 2014-12-16T22:46:21.853 回答