2012-11-05 98 views
0

我试图处理该事件被点击Window的关闭按钮时:手柄窗口关闭事件

// View Code 
@Override 
public void attachWindowListener(WindowListener listener) { 
    window.addWindowListener(listener); 
} 

// Presenter code 
    view.attachWindowListener(new WindowListener(){ 
      public void windowHide(WindowEvent we) { 
       GWT.log("Window Event - Processing fields"); 
       processFields(); 
      }   
    }); 

然而,windowHide功能似乎没有执行,因为我看不到日志我放在那里。

如何正确处理该事件?

回答

0

这工作:

window.addListener(Events.Hide, new Listener<ComponentEvent>() { 
     @Override 
     public void handleEvent(ComponentEvent be) { 
      // Do stuff 
     } 
    }); 
2

如何

Window.addCloseHandler( 
    new CloseHandler<Window>() 
    { 
     public void onClose(CloseEvent<Window> windowCloseEvent) 
     { 
      // Do your worst here 
     } 
    }); 

我通常在我的EntryPoint类把这个onModuleLoad()

干杯,

+0

我相信@ xybrek询问GXT的'Window'小部件,而不是'com.google.gwt.user.client.Window'。 –

+0

@ThomasBroyer是的,我在询问关于Ext GWT(GXT)窗口 – xybrek

+0

道歉,这一点我不清楚。 –

0

基于提供我猜的信息,要么一)你认为是射击不火的窗口组件(即使它看起来像他们应该)或(b)的事件)的事件正在发射,但顺序与预期不同。

例如,当窗口正在关闭并且窗口对象的WindowEvent从不触发时,可能有一个BrowserEvent或某个其他事件首先触发。根据GXT 2.x的API文档,WindowEvent将在隐藏和禁用时触发,但不会指定它在关闭时触发。 GXT 3.0.x API文档在这一点上不太清楚,但我会假设相同的行为。不幸的是,Sencha没有提供关于哪些事件针对给定组件以什么顺序启动的良好文档。

就这样说,我已经有一些运气,通过使用一个调试类来输出与它相关的组件上的所有事件。这可能会揭示事件发生的顺序和执行顺序,并且您可能会发现一个最佳事件,您可以将其附加到您的方法processFields()

有关调试器类的一个很好的例子,请参阅相关文章的答案:https://stackoverflow.com/a/2891746/460638。它还包括如何将调试器附加到组件的示例。

为窗口API文档,GXT 2.X:为窗口http://dev.sencha.com/deploy/gxt-2.2.5/docs/api/com/extjs/gxt/ui/client/widget/Window.html

API文档,GXT 3.0.x的:http://dev.sencha.com/deploy/gxt-3.0.0/javadoc/gxt/com/sencha/gxt/widget/core/client/Window.html