2011-01-10 14 views
1

Ich habe eine Anwendung, die mehrere Windows in einem com.extjs.gxt.desktop.client.Desktop platziert. Ich muss einen Listener anhängen, der die Größe jedes Fensters aufzeichnet, wenn es in der Größe geändert wird. Ich sehe zwei Probleme:Was ist der richtige Weg, um benachrichtigt zu werden, wenn die Größe eines Fensters geändert wird?

  1. Während Verschieben Ereignisse ausgelöst werden, wenn die Fenstergröße verändert wird, erscheinen sie abgefeuert werden, bevor die neue Größe tatsächlich auf das Fenster angewendet wird, so kann ich die neue Größe aus dem nicht anfordern Fenster direkt.

  2. Das WindowEvent, das ich in meinem Listener erhalte, enthält eine Größe von 0x0, unabhängig von der tatsächlichen Größe des Fensters.

Gibt es etwas, das mir hier fehlt?

Hier ist mein befestigen Code:

protected void addWindowListeners(Window w, 
     String uid, WindowData windowData) 
{ 
    WindowChangeListener l = new WindowChangeListener(uid, windowData); 
    w.addWindowListener(l); 
    // Add this again since the default WindowListener doesn't support the Move event. 
    w.addListener(Events.Move, l); 
} 

Und die Zuhörer Klasse:

protected class WindowChangeListener 
    extends WindowListener 
    implements Listener<WindowEvent> 
{ 

    @Override 
    public void windowHide(WindowEvent we) 
    { 
     updateWindowData(we); 
    } 

    @Override 
    public void windowShow(WindowEvent we) 
    { 
     updateWindowData(we); 
    } 

    public void windowMove(WindowEvent we) 
    { 
     updateWindowData(we); 
    } 

    protected void updateWindowData(WindowEvent we) 
    { 
     // Here's the part that needs to get notified with the new size. 
    } 

    @Override 
    public void handleEvent(WindowEvent we) 
    { 
     if(we.getType() == Events.Move) 
      windowMove(we); 
     else 
      super.handleEvent(we); 
    } 
} 

Vielen Dank für jede Einsicht jemand. Ich habe das Gefühl, dass ich etwas Einfaches vermissen muss.

Antwort

1

Ich war tatsächlich die Magie auf den Sencha Foren gegeben: http://www.sencha.com/forum/showthread.php?121249-What-s-the-right-way-to-be-notified-when-a-Window-is-resized&p=561340&posted=1#post561340

stellt sich heraus, dass ich für ein Resize-Ereignis auf Fenster hören:

protected void addWindowListeners(Window w, 
     String uid, WindowData windowData) 
{ 
    w.addListener(Events.Resize, new Listener<WindowEvent>() { 

     @Override 
     public void handleEvent(WindowEvent we) 
     { 
      System.out.println("Resize event: " + we); 
      System.out.println(" Size in event: " + we.getWidth() + "x" + we.getHeight()); 
      System.out.println(" Size of window: " + we.getWindow().getSize()); 
     } 

    }); 
} 
Verwandte Themen