2012-04-03 15 views
4
/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() { 
    Canvas canvas = Canvas.createIfSupported(); 
    final Context2d context2d = canvas.getContext2d(); 

    RootPanel.get("canvas").add(canvas); 
    Image img = new Image("face.png"); 
    final ImageElement face = ImageElement.as(img.getElement()); 
    img.addLoadHandler(new LoadHandler() { 

     @Override 
     public void onLoad(LoadEvent event) { 
      context2d.drawImage(face, 0, 0); 
     } 
    }); 
    //RootPanel.get("canvas").add(img); 
} 

Das ist mein Code. Ich möchte das Bild auf die Leinwand zeichnen. Dies funktioniert, wenn die letzte Zeile:GWT Canvas2D zeichnen Bild

RootPanel.get ("Leinwand"). Add (img);

ist nicht auskommentiert.

Aber mit der Zeile kommentiert es scheint, dass das Bild nicht geladen wird oder so. Irgendwelche Ideen?

Antwort

3

Haben Sie das Bild im WEB-INF-Ordner abgelegt? Dort lädt GWT die Bilder ab. Normalerweise empfiehlt es sich, einen Ordner "images" zu erstellen, um ihn mit "images/face.png" zu laden.

5

Das Bild-Widget muss der Seite hinzugefügt werden, um das Laden des Bildes auszulösen. Mach es einfach unsichtbar:

public void onModuleLoad() {  
    Canvas canvas = Canvas.createIfSupported(); 
    final Context2d context2d = canvas.getContext2d(); 

    RootPanel.get().add(canvas); 
    Image img = new Image("face.png"); 
    final ImageElement face = ImageElement.as(img.getElement()); 
    img.addLoadHandler(new LoadHandler() { 

     @Override 
     public void onLoad(LoadEvent event) { 
      context2d.drawImage(face, 0, 0); 
     } 
    }); 

    img.setVisible(false); 
    RootPanel.get().add(img); 
}   
+0

Dies funktionierte für mich, außer ich musste die img.setVisible setzen (falsch); in der onLoad. – Craigo