[英]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.