java - 有没有办法控制 JavaFX 8 中的菜单弹出位置?

标签 java javafx-8

我正在为我的应用程序开发自定义样式。我当前的问题源于设计师为菜单栏和菜单项指定了完全不同的样式。我实现了按钮样式,但弹出菜单现在稍微覆盖了按钮本身(包括按钮标签),这很丑。

是否有某种方法可以控制菜单弹出位置相对于菜单栏按钮的位置?实际定位这些弹出窗口的代码在哪里?我搜索了 JavaFX 源代码,但 javafx.scene.control.Menu 类不处理与上下文菜单相关的任何内容 - 似乎菜单逻辑发生在某个完全不同的地方。

最佳答案

我相信菜单中的弹出窗口是用 ContextMenu 完成的(与右键菜单相同)。您还可以使用 CSS 更改位置。您还可以使用ScenicViewSceneBuilder广泛调试您的 GUI 并找到适当的 CSS 路径(如果您还没有这样做)。

相关的css类可以在这里找到How can I style a JavaFX menu and its items in CSS?并且内边距和边距可用于移动上下文菜单。

查看 default CSS style称为摩德纳。第 1166 行是菜单内容开始的地方。

希望这有帮助。

更新:

这是我的测试:enter image description here

事实证明,上下文菜单会在菜单按钮的底部弹出。据我所知,没有办法通过 CSS 移动实际节点。

这意味着,由于它与您重叠,菜单按钮不像您的菜单栏那么大,如果您将其设置为与菜单栏一样大(就像我在图片中所做的那样),它将完美地显示在菜单栏下方。

如您所见,我没有在菜单栏上使用填充,而是在菜单按钮上使用它。这将自动调整菜单栏的大小并导致上下文菜单完美弹出。

我还删除了颜色,以向您展示如果删除颜色,它是完全透明的。

正如您在这里看到的: enter image description here

-fx-effect: null; 还删除默认的阴影效果。如果您想对此进行更广泛的控制,您将需要实现自己的菜单按钮和上下文菜单。只有这样,您才能完全控制。

关于java - 有没有办法控制 JavaFX 8 中的菜单弹出位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575046/

相关文章:

java - 如何使 RadioButton 看起来像 JavaFX 中的常规 Button

java - 如果初始文本以换行符结尾,如何防止 JTextPane 重置字体设置?

JavaFX 启动屏幕按钮 onClick 后出现错误

java - 动态更改特定程序包中每个类的日志级别

mouseevent - 从一个节点获取 MOUSE_PRESSED 事件后,无法从任何其他 javafx 8 节点获取鼠标事件

javafx - FXML 中的 JavaScript 脚本

java - Spring 中重写构造函数参数

java - 是否可以使用 WebDriver 获取网页上的所有 WebElements

javafx-2 - 关闭选项卡时确认对话框窗口

java - 处理 PopupWindow 内的事件