GXT按钮在第一次点击时显示菜单,在第二次点击时不会隐藏菜单
问题描述:
这是预期的功能还是我做错了什么?GXT按钮在第一次点击时显示菜单,在第二次点击时不会隐藏菜单
我所做的只是创建一个GXT按钮并调用setMenu来附加一个GXT菜单。在第一次点击时,菜单正确显示,第二次点击时,菜单在MouseDown上消失,但在MouseUp上重新出现。让菜单隐藏的唯一方法是点击按钮。
我确认它是不是有什么奇怪的,在我的代码的特定按钮,通过增加另一个按钮:
Button button = new Button("test");
Menu menu = new Menu();
button.setMenu(menu);
add(button);
如果这样做的目的,是有关于如何添加一个监听器关闭建议第二次点击菜单?
答
我猜测它是按预期工作的,因为一旦失去焦点,菜单就会一直隐藏起来。我在下面做的是覆盖菜单中的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);