java在JavaFX8中有没有控制菜单弹出位置的方法?
我正在为我的应用程序定制样式。我目前的问题源于设计师为菜单栏和菜单项指定了完全不同的样式。我实现了按钮样式,但是菜单弹出现在稍微覆盖了按钮本身(包括按钮标签),这很难看
是否有一些方法可以控制相对于菜单栏按钮的菜单弹出位置?实际定位这些弹出窗口的代码在哪里?我搜索了JavaFX源代码,但javafx.scene.control.Menu
类并没有处理任何与上下文菜单相关的内容——似乎菜单逻辑发生在完全不同的地方
你可以在下面搜索框中键入要查询的问题!
我正在为我的应用程序定制样式。我目前的问题源于设计师为菜单栏和菜单项指定了完全不同的样式。我实现了按钮样式,但是菜单弹出现在稍微覆盖了按钮本身(包括按钮标签),这很难看
是否有一些方法可以控制相对于菜单栏按钮的菜单弹出位置?实际定位这些弹出窗口的代码在哪里?我搜索了JavaFX源代码,但javafx.scene.control.Menu
类并没有处理任何与上下文菜单相关的内容——似乎菜单逻辑发生在完全不同的地方
# 1 楼答案
你不需要复制整个皮肤。如果您扩展皮肤,您可以相当容易地更改它(即使该方法是私有的)。只需复制粘贴以下内容。。。。(在“show”方法中将位置更改为您想要的任何位置)
# 2 楼答案
我相信菜单中的弹出窗口是用ContextMenu完成的(与右键单击菜单相同)。您还可以使用CSS更改位置。您还可以使用ScenicView和SceneBuilder广泛地调试GUI并找到适当的CSS路径(如果您还没有这样做的话)
相关的css类可以在这里找到How can I style a JavaFX menu and its items in CSS?,填充和边距可以用来移动上下文菜单
查看名为Modena的default CSS style。第1166行是菜单开始的地方
希望这有帮助
更新:
这是我的测试:![enter image description here](https://i.stack.imgur.com/sVc19.png)
结果,上下文菜单在菜单按钮的底部弹出。据我所知,没有办法通过CSS移动实际节点
这意味着,由于菜单按钮与菜单栏重叠,因此菜单按钮没有菜单栏大,如果将其设置为菜单栏大(如图中所示),它将完全显示在菜单栏下
正如您所看到的,我在菜单按钮上使用填充,而不是在菜单栏上使用填充。这将自动调整菜单栏的大小,并使contextmenu弹出到位
我还删除了颜色,以显示如果删除颜色,它是完全透明的
正如你在这里看到的:![enter image description here](https://i.stack.imgur.com/LOzG7.png)
-fx-effect: null;
也会删除默认的阴影效果。如果您想更广泛地控制它,您需要实现自己的菜单按钮和上下文菜单。只有到那时,你才能拥有完全的控制权# 3 楼答案
显示弹出窗口的实际代码位于MenuButtonSkinBase中:
popup.show
的最后两个参数是弹出窗口的X和Y偏移量。不幸的是,由于某种原因,方法被标记为private,所以不可能简单地创建MenuButtonSkin
的子类并重写该方法一种可能的解决方案是将粘贴代码从
MenuButtonSkinBase
和MenuButtonSkin
复制到您自己的文件(大约300行代码)中,并在其中调整方法。之后,您将能够执行以下操作: