JavaFX ContextMenu的最大大小无效

时间:2018-07-10 19:27:12

标签: javafx

如果ContextMenu有很多项目,它将填满整个屏幕。看来ContextMenu.setMaxSize毫无作用。

是否有一种方法可以限制ContextMenu的大小,使其仍可以通过鼠标滚轮&滚动并显示向上和向下按钮?

我想我可以使用VBox和Scrollpane滚动我自己的控件,但我想尽可能避免这种情况。

1 个答案:

答案 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());
            }
        });

    }
}