如果ContextMenu
有很多项目,它将填满整个屏幕。看来ContextMenu.setMaxSize
毫无作用。
是否有一种方法可以限制ContextMenu
的大小,使其仍可以通过鼠标滚轮&滚动并显示向上和向下按钮?
我想我可以使用VBox和Scrollpane滚动我自己的控件,但我想尽可能避免这种情况。
答案 0 :(得分:1)
不幸的是,不支持限制弹出窗口的大小:负责显示MenuItems的Region是ContextMenuContent,并实现了自己的computeMaxHeight以返回screenHeight。该容器是由ContextMenuSkin创建的,并存储在私有的final字段中,因此无法用更智能的实现将其替换为自定义实现。
但是,我们可以做的是访问该区域并将其maxHeight设置为与ContextMenu相同的值。为了避免对私有字段的非法非法反射访问,我们可以为Menu.ON_SHOWING事件注册一个处理程序,并根据需要更新大小。
类似
public class MaxSizedContextMenu extends ContextMenu {
public MaxSizedContextMenu() {
addEventHandler(Menu.ON_SHOWING, e -> {
Node content = getSkin().getNode();
if (content instanceof Region) {
((Region) content).setMaxHeight(getMaxHeight());
}
});
}
}