2012-11-05 92 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