2013-01-17 3 views
1

J'ai une fenêtre resizeHandler, ça fonctionne très bien. Sauf que je ne m'intéresse qu'à la dernière dimension de la fenêtre, en d'autres termes, je m'intéresse à la dimension de la fenêtre lorsque le bouton de la souris est relâché. Est-ce que je peux écouter les événements de la souris de la fenêtre?GWT onResize & mouse up

J'ai écrit un morceau de code qui accomplit mon objectif mais je préférerais quelque chose de plus évident. resizeRequestId est un champ:

private void processResize() { 

    final Timer timer = new Timer() { 
    final Size windowSize = getWindowDimention(); 

    final int requestId = ++resizeRequestId; 

    @Override 
     public void run() { 
      final boolean isLatestRequest = requestId == resizeRequestId; 
     if (isLatestRequest) { 
       //DO SOMETHING WITH windowSize 
      } 
     } 
    }; 
    timer.schedule(100); 
} 

Répondre

1

Le navigateur ne passe pas le long des événements qui se produisent en dehors de la page, et la fenêtre redimensionnez compte comme en dehors de la page. Cela dit, vous obtenez toujours un crochet pour redimensionner les actions de l'ensemble de la fenêtre du navigateur:

Window.addResizeHandler(new ResizeHandler() { 
    public void onResize(ResizeEvent event) { 
    //get, process window resize behavior 
    } 
}); 

Pour certains navigateurs et certains redimensionne, vous aurez beaucoup d'événements comme la souris se déplace, et pour les autres, vous seulement obtenir le complet. Dans firefox, par exemple, la poignée de redimensionnement dans le coin envoie chaque modification qui est faite, tandis que le côté gère chaque envoi seulement une fois que l'utilisateur relâche la souris. Minimiser et maximiser la fenêtre entraîne également un seul événement.

+0

Colin, Taille est ma bière ... Je ne suis pas en utilisant GXT. – hba

+0

Oh, alors quand vous dites fenêtre, vous voulez dire toute la fenêtre du navigateur? Je vais mettre à jour ma réponse en conséquence ... –

+0

Colin, merci, c'est exactement comme ça que je suis en train de suivre le redimensionnement de la fenêtre dans mon application. Merci d'expliquer les différents comportements du navigateur. – hba

0

Colin a raison.

En outre, si vous faites beaucoup de calculs "sur redimensionner" (par exemple forceLayout), il est judicieux d'ajouter un temporisateur. De cette façon, les calculs seront tirés une fois tous les ... 10ème de seconde?

final Timer resizeTimer = new Timer() { 
    @Override 
    public void run() { 
     mainPanel.forceLayout(); 
    } 
}; 
Window.addResizeHandler(new ResizeHandler() { 
    public void onResize(ResizeEvent event) { 
     int height = event.getHeight(); 
     mainPanel.setHeight(height + "px"); 
     resizeTimer.cancel(); 
     resizeTimer.schedule(100); 
    } 
}); 

C'est ce