2016-05-27 18 views
0

So habe ich ein Programm in gwt, das mehrere Bilder auf der rechten Seite auflistet und wenn man über einen davon schwebt, werden einige zusätzliche Informationen in einem benutzerdefinierten Widget auf der linken Seite angezeigt, einschließlich eines Teils davon das Bild und ein spezieller Hintergrund, der ein Teil eines größeren Hintergrundbildes ist, für das Widget abhängig vom Bild.SetVisibleRect vermasselt das Bild (gwt)

Bis jetzt funktioniert alles gut und beide Bilder werden grundsätzlich korrekt angezeigt. Das Hintergrundbild hat jedoch das "broken image" -Icon in der oberen linken Ecke, obwohl es perfekt angezeigt wird und auch aktualisiert wird, wenn ich über ein anderes Bild auf der rechten Seite schwebe. Was wirklich wichtig ist, ist, dass der Teil des Bildes, über dem ich schwebte, nur einen Bruchteil einer Sekunde angezeigt wird, bevor das Hintergrundbild geladen wird, weil das Hintergrundbild das andere Bild überdeckt. Wird der Hintergrund weggelassen, wird der Bildbereich normal angezeigt, aber auch das "gebrochene Bild". Wenn Sie setVisibleRect() auf beiden Bildern nicht verwenden, funktioniert alles einwandfrei, aber die angezeigten Bilder sind natürlich falsch. Bisher ist dies mein Code aus dem benutzerdefinierten Widget den gewünschten Teil des Bildes zu zeigen, dass schwebt über wurde:

public void setBild(Image bild) { 
    this.bild.setUrl(bild.getUrl()); 
    this.bild.setVisibleRect(38,61,134,94); 
    this.bild.getElement().getStyle().setZIndex(2); 
} 

wo this.bild ist ein Bild in meiner benutzerdefinierten Widget.

Auch in dem Verfahren, die den Hintergrund auf ein paar Informationen basieren bekommt ich habe, dass:

 if(!hintergrund.isAttached()){ 
     this.add(hintergrund); 
     this.setWidgetLeftWidth(hintergrund, 0, Unit.PX, 230, Unit.PX); 
     this.setWidgetTopHeight(hintergrund, 0, Unit.PX, 650, Unit.PX); 
    } 



    if(k.getFarbe().equals("rot")) hintergrund.setVisibleRect(460, 0, 230, 650); 
    if(k.getFarbe().equals("hell")) hintergrund.setVisibleRect(230, 0, 230, 650); 
    if(k.getFarbe().equals("braun")) hintergrund.setVisibleRect(0, 0, 230, 650); 
    if(k.getFarbe().equals("grun")) hintergrund.setVisibleRect(0, 650, 230, 650); 
    if(k.getFarbe().equals("grau")) hintergrund.setVisibleRect(230, 650, 230, 650); 
    if(k.getFarbe().equals("lila;braun")) hintergrund.setVisibleRect(460, 650, 230, 650); 

    hintergrund.getElement().getStyle().setZIndex(1); 

wo Hintergrund das Hintergrund-Bild ist.

Wenn ich über ein Bild bewegen, mein comiler gibt mir die Nachricht

[WARN] 404 - GET /labyrinthweb/clear.cache.gif (127.0.0.1) 1393 bytes 


Request headers 
     Host: 127.0.0.1:8888 
     User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:46.0) Gecko/20100101 Firefox/46.0 
     Accept: image/png,image/*;q=0.8,*/*;q=0.5 
     Accept-Language: en-US,en;q=0.5 
     Accept-Encoding: gzip, deflate 
     Referer: http://127.0.0.1:8888/LabyrinthWeb.html 
     Cookie: optionen=310; JSESSIONID=vyr356eyxfph1lzazwqw8rkn8 
     Connection: keep-alive 
    Response headers 
     Content-Type: text/html;charset=ISO-8859-1 
     Cache-Control: must-revalidate,no-cache,no-store 
     Content-Length: 1393 

erklärte ich auch

<script type="text/javascript" language="javascript" 
src="labyrinthweb/labyrinthweb.nocache.js"></script> 

in meiner HTML-Datei umbenannt und mein Modul in meinem * .gwt labyrinthweb .xml-Datei.

Kann mir jemand da draußen helfen?

Antwort

2

So funktioniert Image widget works: es ist url attribute punkte zu einem standard 1x1 pixel transparent gif. Um das Bild beschneiden zu können (und andere Dinge), wird das reale Bild als Hintergrund des Widgets angezeigt. Es ist einfach zu tun setVisibleRect auf diese Weise, das Widget nur background-position Attribut und ändert die Größe.

Ihr Problem ist, dass Sie das Standard transparent gif clear.cache.gif verpassen:

[WARN] 404 - GET /labyrinthweb/clear.cache.gif (127.0.0.1) 1393 bytes 

Das ist, warum Sie ein broken-image Symbol oben auf Ihrem Bild zu sehen.

clear.cache.gif sollte sich im Ordner war\module_name befinden und dort jedes Mal kopiert werden, wenn Sie Ihr Projekt kompilieren. So sollten Sie versuchen, die folgenden:

  • neu kompilieren das Projekt
  • prüft, ob die clear.cache.gif im war\module_name Ordner
  • klar Ihren Browser-Cache

Ich hoffe, das hilft.

0

Eine andere gwt rekompilieren tatsächlich alles behoben :)