2011-01-08 7 views
1

In einer GWT-App, die um eine Leinwand zentriert ist, habe ich Probleme, den Fokus auf den richtigen Ort zu richten - insbesondere für Tastaturkürzel. Für den Moment habe ich die Zeichenfläche in ein FocusPanel eingepackt, aber das bewirkt, dass die Zeichenfläche nicht auf das RequiresResize-Protokoll reagiert, weil FocusPanel das nicht löscht.Wie füge ich einen Ereignishandler an das Dokument oder das Fenster in GWT an?

Ein zweites (verbundenes, ich denke) Problem ist, dass das FocusPanel keine Ctrl-A-Tastenanschläge überhaupt erhält (getestet auf Mac Chrome). Ich kann Strg-Z und andere Schlüssel (wie Pfeile) gut bekommen.

In einer reinen JavaScript-Welt denke ich, die beste Antwort darauf wäre, Maus und Schlüsselhandler an das Dokument oder Fensterobjekt anzuhängen (ich bin nicht positiv, was besser ist). Ich sehe jedoch keine offensichtliche Möglichkeit, dies in GWT zu tun - insbesondere fehlt den Dokumenten- und Fensterklassen die Möglichkeit, diese Art von Event-Handlern anzuhängen.

Wer weiß, wie man es macht, oder vielleicht, um das allgemeinere Problem zu lösen, sich auf ein geeignetes Widget zu konzentrieren, das in der Lage ist, Tastaturkürzel zu handhaben?

Antwort

3

Sie können Ihr erstes Problem durch die Erweiterung FocusPanel lösen die RequiresResize und ProvidesResize Schnittstellen zu implementieren:

public class ResizingFocusPanel 
    extends FocusPanel 
    implements RequiresResize, ProvidesResize 
{ 
    public ResizingFocusPanel() {} 

    public ResizingFocusPanel(Widget child) { 
    super(child); 
    } 

    @Override 
    public void onResize() { 
    if (getWidget() instanceof RequiresResize) { 
     ((RequiresResize)getWidget()).onResize(); 
    } 
    } 
} 
+0

Das ist mein Resize behebt (außer ich den nullary Konstruktor benötigt, so konnte ich das XML-Bindemittel verwendet werden). Ich experimentierte etwas mit Roh-JavaScript und dachte, dass ich wahrscheinlich Keydown greifen muss, anstatt nur die Taste drücken zu müssen, um die Ctrl-A-Ereignisse zu erhalten, selbst wenn ich ein Fenster oder ein Dokument angehängt habe. Ich denke, das ist das Beste, was ich für jetzt tun kann. Vielen Dank! –

Verwandte Themen