2010-12-20 30 views
4

いくつかのメッセージを表示するのにgwtポップアップを使用しますが、popup.center()を呼び出すと表示イベントの センター に表示されません。実際にはそれは中心にされていません 私はそれを閉じて、すべてのものが大丈夫、 が初めてではなく、それを開いて初めて初めて。それを修正するには?gwtポップアップが中央に配置されていません

GWT.runAsync(new RunAsyncCallback() { 
    @Override 
    public void onSuccess() { 
     Image fullImage = new Image(optionImageName); 
     fullImage.setAltText("Loading image ..."); 
     imagePopup.setWidget(fullImage); 
     imagePopup.center(); 
    } 
}); 

この質問はhttp://www.devcomments.com/gwt-Popup-is-not-centered-at107182.htmで見つかりましたが、今日でもこの問題がありました。私は答えを見つけたので、今後の参考のためにここに掲載します。

答えて

2

ポップアップを中央に置くと画像が読み込まれないという問題が発生しました。これは、画像が何らかの形でブラウザによってキャッシュされているために初めて発生します。

この問題を解決するには、onLoadイベントの中心に配置する方法もあります。

GWT.runAsync(new RunAsyncCallback() { 
    @Override 
    public void onSuccess() { 
     Image fullImage = new Image(optionImageName); 
     fullImage.setAltText("Loading image ..."); 
     fullImage.addLoadHandler(new LoadHandler() { 
      @Override 
      public void onLoad(LoadEvent event) { 
       imagePopup.center(); 
      } 
     }); 
     imagePopup.setWidget(fullImage); 
     imagePopup.center(); 
    } 
}); 
+0

イメージ( 'Image.prefetch(String)')のプリフェッチを試みたことがありますか? – z00bs

+0

'GWT.runAsync'を使うと別のスクリプトにコンパイルされることになります。これはおそらくあなたが望むものではありません。 'DeferredCommand'やGWT 2.1の' Scheduler.get()... 'を使うほうが良いでしょう。またはzOObsが示唆するようにプリフェッチを使用してください。 –

+0

パフォーマンス上の理由から、GWT.runAsyncの使用が意図されています。基本的に私は多くの小さな画像(ClientBundleを介して読み込まれた)を持ったページを持っています、そして、私は一部のユーザーだけがここをクリックしてズームした画像を見ることを期待しています。私は、イメージの幅/高さが分かる前に、center()メソッドが呼び出された長いデバッグ時間を通して実現しました。だから私たちはonLoadセンターが必要です。 onLoadメソッドの外側に2番目のセンターが必要です。イメージがキャッシュされる可能性があるからです。 – raisercostin

1

この問題もありました。センターを2回コールする必要がある理由は、ポップアップコンテナがポップアップが「隠されている」ときにDOMから実際に削除されるためです。これは、画像がロードされていることを確認する前に、あなたのポップアップがポップアップの内容を "表示"する必要があるため、問題があります。

実装が推奨されている問題は、画像がキャッシュされていない場合、center()への最初の呼び出しが正しく行われないことです。センターへの2回目のコールでそれを修正します。ブラウザでは、これはポップアップダイアログボックスのシフトを引き起こします(これはかなり悪く見えます)。

私は次のことをお勧めします: 1.待っているスピナーを同じディスプレイに置き、最初にそれを表示します。 2. loadHandlerが呼び出され、イメージが表示され、スピナーが非表示になり、再センタリングされます。

+0

はい、そうです。イメージがキャッシュからロードされていない場合、イメージは間違った場所にロードされます。私はまだあなたのソリューションがうまくいくとは思わない。サンプルをお願いしますか? – raisercostin

0
public void onClick(ClickEvent event) { 
      // TODO Auto-generated method stub 
      final ADPopup popup = new ADPopup(); 
      popup.setHeight("300px"); 
      popup.setWidth("500px"); 
      popup.setPopupPositionAndShow(new PopupPanel.PositionCallback() { 

       public void setPosition(int offsetWidth, int offsetHeight) { 
        // TODO Auto-generated method stub 
        int left = (Window.getClientWidth() - offsetWidth)/3; 
        int top = (Window.getClientHeight() - offsetHeight)/3; 

        popup.setPopupPosition(left, top); 
       } 
      }); 

      popup.show(); 
     } 

このヘルプが必要です。

関連する問題