2012-04-19 43 views
0

我有一个GXT 2.x应用程序,它带有一个呈现独立LayoutContainer的Menubar项目。GXT:LayoutContainer不响应ESC键或“X”按钮关闭

这里的层次 MainUI.java - > MenuBar.java - > ReservationPopUp.java

我已经取代我的ReservationPopUp.java的内容与LayoutContainer实现的可正常工作的例子,他们的ESC键和“响应X“按钮。

这里的菜单项是如何呈现这些ReservationPopUp.java

MenuItem mntmReserve = new MenuItem("Reserve"); 
mntmReserve.addSelectionListener(new SelectionListener<MenuEvent>() { 
    public void componentSelected(MenuEvent ce) { 
     RootPanel.get().add(new ReservationPopUp()); 

} 

这里是我的ReservationPopUp.java

public class ReservationPopUp extends LayoutContainer { 
public ReservationPopUp() { 
} 

@Override 
    protected void onRender(Element parent, int pos) { 

    super.onRender(parent, pos); 
    setSize("1024", "809"); 
    final Window window = new Window(); 
    window.setDraggable(false); 
    window.setSize(537, 399); 
    window.setPlain(true); 
    window.setModal(true); 
    window.setBlinkModal(true); 
    window.setHeading("Reserve A Server"); 
    window.setClosable(true); 
    window.setOnEsc(true); 
    window.setSize("465", "345"); 
    window.setLayout(new AbsoluteLayout()); 

    LabelField lblfldUsers = new LabelField("Users"); 
    window.add(lblfldUsers, new AbsoluteData(43, 218)); 
    final ComboBox<AsyncUser> userList = new ComboBox<AsyncUser>(); 

    window.add(userList, new AbsoluteData(81, 218)); 
    userList.setEmptyText("Select a User..."); 
    userList.setSize("347px", "24px"); 

    LabelField labelServers = new LabelField("Servers"); 
    window.add(labelServers, new AbsoluteData(32, 6)); 

    final DualListField<AsyncServer> serverList = new DualListField<AsyncServer>(); 
     .... 
    window.add(serverList, new AbsoluteData(81, 6)); 
    serverList.setSize("347px", "206px"); 

    window.addButton(new Button("Cancel", new SelectionListener<ButtonEvent>() { 
      @Override 
      public void componentSelected(ButtonEvent ce) { 
      ReservationPopUp.this.hide(); 
      } 
    })); 

    window.addButton(new Button("Reserve", new SelectionListener<ButtonEvent>() { 
      @Override 
      public void componentSelected(ButtonEvent ce) { 
      if (serverList.getToList().getListView().getItemCount() == 0) { 
       MessageBox.alert("Invalid Selection","No Server(s) Selected", null); 
      } else if (userList.getValue() == null) { 

      } else { 
       // DO some stuff 
       ReservationPopUp.this.hide(); 
      } 
      } 
     })); 

    window.addWindowListener(new WindowListener() { 
     @Override 
     public void windowHide(WindowEvent we) { 
      ReservationPopUp.this.hide(); 
     } 
     }); 
    window.setFocusWidget(window.getButtonBar().getItem(0)); 
    add(window); 

} 

}

回答

2

Window的削减版本是一个弹出,这不是” t需要(并且不应该)被添加到任何东西。扩展Window类而不是LayoutContainer,而不是将ReservationPopup添加到页面,只需调用Window.show()即可。

+0

+1非常真实。当我在GXT3教程中添加一个'Window'到一个面板时,科林开始讨论我的情况:-) – 2012-04-19 04:12:41

+0

感谢科林,这个技巧。不敢相信我等了这么久才问这个论坛。 – facistAdmin 2012-04-20 03:04:03