0

私は GWT が初めてで、なぜこれを機能させることができないのか疑問に思っていました。

次のコードで縦横比を維持しながら、大きな画像を小さな画像にサイズ変更しようとしています。

Image image = new Image(myImageResource.getURL());
image.setPixelSize(newWidth, myImageResource.getHeight() * newWidth / myImageResource.getWidth());

しかし、何が起こるかというとmyImageResource.getHeight()myImageResource.getWidth()関数は最初に 0 を返し、上記のコード スニペットを実行する CellList 項目 (SingleSelectionModel を介して処理) をクリックし、同じリスト項目を 2 回目にクリックすると完全に機能します。これは、すべての CellList 項目で発生します。私は非常に多くのことを試みましたが、それを機能させることができませんでした。

何が問題なのか誰か助けてくれませんか?

4

2 に答える 2

2

で操作を行っている間image、実際にはDOMに追加されていません。DOMに追加した後、その操作を行う必要があります。

    Image image = new Image();
            image.addLoadHandler(new LoadHandler() {
                @Override
                public void onLoad(LoadEvent event) {
              //Do your operations on image .
       image.getElement().getStyle().setVisibility(Style.Visibility.Visible); 
                      }
                 });

    image.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN); 
    RootPanel.get().add(image);
    image.setUrl(url);

Style.Visibility.Hidden と Visibleについて疑問を抱くかもしれません

理由: で変更を行っている場合image(resize)、ユーザーは最初に元の画像を表示してから、画像のサイズを変更できます。最初に ige を非表示にしないようにするには、変更を行い、最後にJUST SHOW ITを実行します。

于 2013-02-24T20:48:04.187 に答える
0

You can get the correct height and width of the image only if the image is already rendered in the UI.

クリック時に画像をレンダリングしようとしていると思います。その場合、最初のクリックでは、画像はまだレンダリングされていません。したがって、高さと幅として 0 が返されます。最初のクリック以降は、画像が既にレンダリングされているため、適切な値が返されます。したがって、完全に機能します。

解決策 : CellList 項目と共に画像をレンダリングし、CSS の visible または display プロパティを使用して画像の可視性を制御します。クリックすると、計算された高さと幅で画像の可視性が有効になります。

于 2013-02-24T14:37:27.780 に答える