GXT 按钮第一次单击时显示菜单,第二次单击时不会隐藏菜单

发布于 2024-10-13 06:35:09 字数 352 浏览 2 评论 0原文

这是预期的功能还是我做错了什么?

我所做的就是创建一个 GXT 按钮并调用 setMenu 来附加 GXT 菜单。第一次单击时,菜单正确显示,第二次单击时,菜单在 MouseDown 上消失,但在 MouseUp 上重新出现。隐藏菜单的唯一方法是单击远离按钮的位置。

我通过添加另一个按钮来确认代码中的特定按钮没有什么奇怪的:

Button button = new Button("test");
Menu menu = new Menu();
button.setMenu(menu);
add(button);

如果这是有意的,是否有关于如何添加侦听器以在第二次单击时关闭菜单的建议?

Is this the intended functionality or am I doing something wrong?

All I'm doing is creating a GXT Button and calling setMenu to attach a GXT menu. On first click, the menu shows properly, on second click, the menu disappears on MouseDown, but reappears on MouseUp. The only way to get the menu to hide is to click away from the button.

I confirmed that it isn't anything strange with a particular button in my code by adding another button:

Button button = new Button("test");
Menu menu = new Menu();
button.setMenu(menu);
add(button);

If this is intended, is there a suggestion on how to add a listener to close the menu on second click?

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

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

发布评论

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

评论(1

旧瑾黎汐 2024-10-20 06:35:09

我猜测它正在按预期工作,因为菜单一旦失去焦点就会立即隐藏。下面我所做的是重写菜单中的 onAutoHide 方法,以便在按下具有指定 ID 的按钮时不隐藏(相应更改)。这使我能够检查菜单是否显示在按钮的 onClick 方法中 - 然后不再显示。但请注意...我绝不是专家,这是一个黑客:)

Button button = new Button("Test") {
        @Override
        protected void onClick(ComponentEvent ce) {
            ce.preventDefault();
            focus();
            hideToolTip();
            if (!disabled) {
                ButtonEvent be = new ButtonEvent(this);
                if (!fireEvent(Events.BeforeSelect, be)) {
                    return;
                }
                if (menu != null) {
                    if (!menu.isVisible())
                        showMenu();
                    else
                        hideMenu();
                }
                fireEvent(Events.Select, be);
            }
        }
    };
    button.setId("TESTBUTTONID");
    Menu menu = new Menu() {
        @Override
        protected boolean onAutoHide(PreviewEvent pe) {
            if (pe.getEventTypeInt() == Event.ONMOUSEDOWN
                    && !(pe.within(getElement()) || (fly(pe.getTarget())
                            .findParent(".x-ignore", -1) != null))
                    && !(fly(pe.getTarget()).findParent(".x-btn", -1) != null
                    && fly(pe.getTarget()).findParent(".x-btn", -1).getId()
                            .equalsIgnoreCase("TESTBUTTONID"))) {
                MenuEvent me = new MenuEvent(this);
                me.setEvent(pe.getEvent());
                if (fireEvent(Events.AutoHide, me)) {
                    hide(true);
                    return true;
                }
            }
            return false;
        }
    };
    button.setMenu(menu);
    RootPanel.get().add(button);

I am guessing that it is working as intended since the menu always hides as soon as it loses focus. What I did below is override the onAutoHide method in the menu to not hide if the button with the specified ID is pressed (change accordingly). This gives me the ability to check if the menu is shown in the onClick method of the button - and then not show it again. Be warned though...I am in no way an expert and this is a hack :)

Button button = new Button("Test") {
        @Override
        protected void onClick(ComponentEvent ce) {
            ce.preventDefault();
            focus();
            hideToolTip();
            if (!disabled) {
                ButtonEvent be = new ButtonEvent(this);
                if (!fireEvent(Events.BeforeSelect, be)) {
                    return;
                }
                if (menu != null) {
                    if (!menu.isVisible())
                        showMenu();
                    else
                        hideMenu();
                }
                fireEvent(Events.Select, be);
            }
        }
    };
    button.setId("TESTBUTTONID");
    Menu menu = new Menu() {
        @Override
        protected boolean onAutoHide(PreviewEvent pe) {
            if (pe.getEventTypeInt() == Event.ONMOUSEDOWN
                    && !(pe.within(getElement()) || (fly(pe.getTarget())
                            .findParent(".x-ignore", -1) != null))
                    && !(fly(pe.getTarget()).findParent(".x-btn", -1) != null
                    && fly(pe.getTarget()).findParent(".x-btn", -1).getId()
                            .equalsIgnoreCase("TESTBUTTONID"))) {
                MenuEvent me = new MenuEvent(this);
                me.setEvent(pe.getEvent());
                if (fireEvent(Events.AutoHide, me)) {
                    hide(true);
                    return true;
                }
            }
            return false;
        }
    };
    button.setMenu(menu);
    RootPanel.get().add(button);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文