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