JavaFX 上下文菜单停止父级的透明背景

JavaFX Context Menu stops Parent's Transparent Background

所以,我一直在用 JavaFX 编写模拟时钟,并且已经掌握了基本功能。现在,我尝试在单击自定义按钮(用多边形制作的三角形)时添加下拉菜单。到目前为止,一切正常,除了当我尝试在单击按钮之前或之后添加 ContextMenu 时,我的 StackPane 的背景是白色的。到目前为止,透明度一直很好。这是问题的一些图片。

这是它应该的样子(你可以看到我的壁纸,因为透明 window,这是应该的。) enter image description here

按下下拉菜单按钮后,背景发生变化。 enter image description here

回答我自己的问题以防其他人想知道,似乎当将 ContextMenu 添加到场景时,舞台的 initStyle(StageStyle.TRANSPARENT) 被覆盖并显示父级的颜色。由于我没有为根初始化任何 CSS 样式,它只是显示为白色。解决方法是:

//父布局Pane

parent.setStyle("-fx-背景色: rgba(0, 0, 0, 0.0)");

JavaFX 控件的样式由 CSS 设计。第一次创建控件时,会加载默认用户代理样式表 (modena.css),并将其中定义的样式应用于场景图。其他 JavaFX 节点 类,例如形状、图像视图和布局窗格,不强制执行 CSS 加载(这是为了增强不需要 CSS 的图形密集型应用程序的性能) .

所以听起来好像上下文菜单是您创建的第一个控件:当您创建并显示它时,它会将默认 CSS 应用于场景。根窗格的默认背景颜色是非透明颜色,因此虽然您的 SceneStage 可能是透明的,但应用 CSS 后场景的内容不是。

解决方法是指定根窗格的透明度:

root.setStyle("-fx-background-color: transparent;");

或外部样式表中的等效项。