GWT,单击 MenuItem 时禁用自动关闭 MenuBar?

发布于 2024-11-18 23:08:11 字数 93 浏览 11 评论 0 原文

我想当我单击菜单项时是否可以禁用自动关闭菜单栏? 我有几个类似于复选框的菜单项,因此我可以检查多个菜单项,并且不希望每次检查一个菜单项时都关闭菜单。

谢谢。

I want to if it is possible to disable the auto-close MenuBar when I click on a MenuItem?
I have several MenuItem that are like checkboxes, so I can check more than one MenuItem and don't want my menu close everytime I checked one.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

当梦初醒 2024-11-25 23:08:11

我遇到了同样的问题,我将与您分享我的解决方案:

1)创建扩展 MenuItem 的新类 MyMenuItemWithCheckBox。
在构造函数中将元素 ID 设置为(例如)menuItemWIthCheckBox + 唯一文本。
this.getElement().setId("menuItemWithCheckBox_" + menuItemLabel);

2) 创建扩展 MenuBar 的新类 MyMenuBar。
通过以下方式覆盖 onBrowserEvent 方法:

Override
    public void onBrowserEvent(Event event) {
        if (DOM.eventGetType(event) == Event.ONCLICK && getSelectedItem().getElement().getId().contains("CheckBox")) {
            Scheduler.get().scheduleFinally(new Scheduler.ScheduledCommand() {
                @Override
                public void execute() {
                    getSelectedItem().getScheduledCommand().execute();
                }
            });

            event.stopPropagation();
        } else {
            super.onBrowserEvent(event);
        }
    }

现在始终调用 MenuItem 的计划命令,但在您的情况下
菜单复选框项目没有菜单栏的关闭。

我希望这对您有帮助,我花了一天多的时间来创建这个解决方案。 :-)

I was facing same problem and I will share with you my solution:

1) Create new class MyMenuItemWithCheckBox that extends the MenuItem.
In the constructor set element ID to (forexample) menuItemWIthCheckBox + Unique text.
this.getElement().setId("menuItemWithCheckBox_" + menuItemLabel);

2) Create new class MyMenuBar that extends the MenuBar.
Override the onBrowserEvent method by following:

Override
    public void onBrowserEvent(Event event) {
        if (DOM.eventGetType(event) == Event.ONCLICK && getSelectedItem().getElement().getId().contains("CheckBox")) {
            Scheduler.get().scheduleFinally(new Scheduler.ScheduledCommand() {
                @Override
                public void execute() {
                    getSelectedItem().getScheduledCommand().execute();
                }
            });

            event.stopPropagation();
        } else {
            super.onBrowserEvent(event);
        }
    }

Now scheduled command of MenuItem is always called, but in the case of your
menu checkBox item there is no close of a menubar.

I hope this help you, I spend more than day to create this solution. :-)

远昼 2024-11-25 23:08:11

首先,直接这是不可能的,因为显示子菜单的弹出面板在 MenuBar 类中是私有的。

但是,有一种方法可以做到这一点...

简单地从 google 代码存储库中获取当前的 MenuBar.java 代码并将其包含在您的 eclipse gwt-项目中。

您不必更改任何内容,例如包声明或其他内容。只需将源代码放入项目中,它就会在编译期间简单地替换 gwt-sdk 中的原始 MenuBar 类(也适用于托管开发模式)。

然后,您只需将弹出面板的属性 autoHide 设置为 false,单击后弹出窗口不应消失。

First, directly it's not possible because the popup-panel which displays the submenu is private in the MenuBar class.

Buuut, there is a way to do so ...

Simpley fetch the current MenuBar.java code out of googles code repository and include it in your eclipse gwt-project.

You don't have to change anything e.g. package deklaration or something. Just put your source in your project and it will simply replace the original MenuBar-class from the gwt-sdk during compilation (works also with hosted development mode).

Then you can simply set the property autoHide of the popup-Panel to false and the popup shouldn't disappear after clicking.

不疑不惑不回忆 2024-11-25 23:08:11

您可以在菜单项上将 hideOnClick 设置为 false

请参阅此处

You can set hideOnClick to false on the menuItems

See here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文