我正在为我的应用程序开发自定义样式。我当前的问题源于设计师为菜单栏和菜单项指定了完全不同的样式。我实现了按钮样式,但弹出菜单现在稍微覆盖了按钮本身(包括按钮标签),这很丑。
是否有某种方法可以控制菜单弹出位置相对于菜单栏按钮的位置?实际定位这些弹出窗口的代码在哪里?我搜索了 JavaFX 源代码,但 javafx.scene.control.Menu
类不处理与上下文菜单相关的任何内容 - 似乎菜单逻辑发生在某个完全不同的地方。
最佳答案
我相信菜单中的弹出窗口是用 ContextMenu 完成的(与右键菜单相同)。您还可以使用 CSS 更改位置。您还可以使用ScenicView和 SceneBuilder广泛调试您的 GUI 并找到适当的 CSS 路径(如果您还没有这样做)。
相关的css类可以在这里找到How can I style a JavaFX menu and its items in CSS?并且内边距和边距可用于移动上下文菜单。
查看 default CSS style称为摩德纳。第 1166 行是菜单内容开始的地方。
希望这有帮助。
更新:
事实证明,上下文菜单会在菜单按钮的底部弹出。据我所知,没有办法通过 CSS 移动实际节点。
这意味着,由于它与您重叠,菜单按钮不像您的菜单栏那么大,如果您将其设置为与菜单栏一样大(就像我在图片中所做的那样),它将完美地显示在菜单栏下方。
如您所见,我没有在菜单栏上使用填充,而是在菜单按钮上使用它。这将自动调整菜单栏的大小并导致上下文菜单完美弹出。
我还删除了颜色,以向您展示如果删除颜色,它是完全透明的。
-fx-effect: null;
还删除默认的阴影效果。如果您想对此进行更广泛的控制,您将需要实现自己的菜单按钮和上下文菜单。只有这样,您才能完全控制。
关于java - 有没有办法控制 JavaFX 8 中的菜单弹出位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575046/