Как правильно получать уведомления при изменении размера окна? - PullRequest
1 голос
/ 11 января 2011

У меня есть приложение, которое помещает несколько окон в com.extjs.gxt.desktop.client.Desktop. Мне нужно прикрепить слушатель, который записывает размер каждого окна при изменении его размера. Я вижу две проблемы:

  1. Хотя события Move генерируются при изменении размера окна, они, похоже, срабатывают ДО того, как новый размер фактически будет применен к окну, поэтому я не могу напрямую запросить новый размер из окна.

  2. WindowEvent, который я получаю в моем Слушателе, содержит размер 0x0, независимо от фактического размера окна.

Есть ли что-то, что я здесь упускаю?

Вот мой прикрепленный код:

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 );
}

И класс слушателя:

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 );
    }
}

Спасибо за понимание, которое есть у каждого. Я чувствую, что мне не хватает чего-то простого.

1 Ответ

1 голос
/ 15 января 2011

Мне действительно дали магию на форумах Сенчи: 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

Оказывается, я могу прослушивать событие изменения размера в Window:

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() );
        }

    });
}
...