2011-01-08 3 views
1

キャンバスを中心としたGWTアプリでは、フォーカスを適切な場所、特にキーボードショートカットに向けることが難しいです。今のところ、私はFocusPanelでキャンバスをラップしましたが、それはFocusPanelがそれを鉛直にしないのでキャンバスがRequiresResizeプロトコルに応答しなくなります。GWTのドキュメントまたはウィンドウにイベントハンドラをアタッチするにはどうすればよいですか?

問題は、FocusPanelがCtrl-Aキー押しイベントをまったく取得していないことです(Mac Chromeでテスト済み)。私はCtrl-Zと他のキー(矢印など)をうまく使うことができます。

純粋なJavaScriptの世界では、マウスやキーハンドラをドキュメントやウィンドウオブジェクトに付けることが最良の答えだと思います。しかし、私はGWTでこれを行うための明白な方法は見当たりません - 特に、DocumentクラスとWindowクラスには、これらの種類のイベントハンドラを添付する方法がありません。

キーボードショートカットを処理できる適切なウィジェットに焦点を当てるという、より一般的な問題を解決する方法を知っている人はいますか?

答えて

3

あなたがRequiresResizeとProvidesResizeインタフェースを実装するFocusPanelを拡張することによって、あなたの最初の問題を解決することができます

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

これは(私はXMLのバインダーを使用することができますので、私は引数なしのコンストラクタを必要以外)私のリサイズを修正します。私は生のJavaScriptを試してみましたが、ウィンドウやドキュメントに貼り付けるときでさえCtrl-Aイベントを取得するために単にキー押下するのではなく、キーダウンを取得する必要があると思います。だから、これは私が今できる最善のものだと思う。ありがとう! –

関連する問題