[英]GWT prevent popup panel from opening
我有一个附有ScheduledCommand的MenuItem 。 当用户点击菜单上,一个新的PopupPanel看来,具有autoHide
功能。 现在,当用户在弹出窗口打开时单击MenuItem时,面板将关闭,但由于PopupPanel的close事件作为菜单项上的click事件触发而立即再次打开。 有人可以告诉我在这种情况下如何防止PopupPanel打开吗?
我的代码是这样的:
@UiField
protected MenuItem menuItem;
....
menuItem.setScheduledCommand(new ScheduledCommand() {
@Override
public void execute() {
PopupPanel window = new PopupPanel();
window.init();
window.addCloseHandler(new CloseHandler<PopupPanel>() {
@Override
public void onClose(final CloseEvent<PopupPanel> event) {
// TODO Maybe something here?
}
});
window.show();
}
});
为弹出窗口创建一个实例,然后使用PopupPanel#isShowing
方法隐藏或显示弹出窗口。
public class MyMenuClass{
private PopupPanel window;
....
....
menuItem.setScheduledCommand(new ScheduledCommand() {
@Override
public void execute() {
if(window==null){
window = new PopupPanel(true);
window.add(new Label("Hello close me!!!"));
}
if(window.isShowing()){
window.hide();
}else{
window.show();
}
}
}
好的,我通过检查菜单栏上最后一个悬停的元素是否是打开窗口的menuItem来做到这一点。 为此,我必须继承默认的MenuBar类并公开getSelectedItem()
方法(默认情况下它受到保护,为什么?)
@UiField
MyMenuBar myMenuBar;
....
menuItem.setScheduledCommand(new ScheduledCommand() {
@Override
public void execute() {
if (!wasHoveredWhenClosed) {
window.init();
window.addCloseHandler(new CloseHandler<PopupPanel>() {
@Override
public void onClose(final CloseEvent<PopupPanel> event) {
wasHoveredWhenClosed = myMenuBar.getSelectedItem() != menuItem;
}
});
window.show();
} else {
wasHoveredWhenClosed = false;
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.