[java+applet] Laden/maken images maar niet in applet

Pagina: 1
Acties:

  • yiko
  • Registratie: September 2003
  • Laatst online: 20-04-2025
Don't kick me , als dit een domme vraag zou zijn.

Ik ben voor de eerste keer bezig met Image in java, meer bepaald in een Applet. Dit lukt al aardig. Ik maak ook gebruik van doublebuffering en alles werkt goed. Maar nu zit ik met het volgende.

Voor het inladen van de images gebruik ik getImage(...) van de Applet class. Ook createImage(...) van de Applet class moet er aan geloven. Maar nu bij het herstructureren , kom ik tot de vaststelling dat ik natuurlijk getImage en createImage niet kan gebruiken in mijn nieuwe class BordGfx. Voorlopig heb ik al zitten oplossen door de images in mijn applet te laten en als argument mee te geven aan mijn BordGfx class. Maar ik ben hier niet tevreden mee. Voor het aanmaken van een buffer image zou ik nu ook in mijn applet een image moeten aanmaken en meegegeven met mijn BordGfx, wat ik dus niet "mooi" vind.

Ik heb al zitten prutsen met Toolkit.getDefaultToolkit.getImage(...) maar dit wil niet werken.

Wat is nu de beste manier om afbeeldingen te laden + aanmaken.En dit eventueel onafhankelijk van het feit dat het een Applet is , of een Applicatie. Maakt dit een verschil als ik alles in 1 jar prop ?

Alvast bedankt aan diegene die de moeite gedaan heeft om dit te lezen

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 16-05 13:05
Wat dacht je van een ImageFactory meegeven aan je implementatie?

Je schrijft een interface:
Java:
1
2
3
public interface ImageFactory {
Image getImage(String imageIdentity);
}


Deze implement je vervolgens op je Applet. Je Applet geef je vervolgens mee als een ImageFactory aan je implementatie.


OF!!

Je maakt een implementatie van je ImageFactory interface die onderwater weer je applet gebruikt... M.a.w. een AppletImageFactory.

Wanneer je iets anders nodig gaat hebben dan maak je een andere implementatie van je ImageFactory.

Tadaa, weg afhankelijkheid.

Edit:

Als je slim bent heb je je images gepackaged in een jar. Is lekker makelijk downloaden. Je Applet haalt dit eerst binnen en gaat dan pas runnen, dus je hoeft niet tijdens de executie van je applet extreem lang te gaan wachten op het laden van een image van het Web. En (nog belangrijker) je kan plaatjes in een desktop applicatie opdezelfde manier laden als in een applet. Namelijk als een resource.

[ Voor 40% gewijzigd door The - DDD op 02-06-2004 19:31 ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 16-05 13:05
Enne je hebt last van iets waar alle beginners last van hebben. Je wilt gewoon te moeilijk doen. ;)

  • yiko
  • Registratie: September 2003
  • Laatst online: 20-04-2025
The - DDD schreef op 02 juni 2004 @ 19:32:
Enne je hebt last van iets waar alle beginners last van hebben. Je wilt gewoon te moeilijk doen. ;)
Ik wil altijd moeilijk doen ;)

Een gemakkelijke oplossing zou zijn, om telkens mijn applet mee te geven aan mijn BordGfx, of gelijk welke class waarin ik images wil maken etc. Maar dit lijkt mij geen correcte oplossing.
Jouw voorstel om een interace ImageFactory te implementeren, klinkt leuk, alleen snap ik totaal niet wat je bedoeld. Heb al zitten zoeken (lees : googlen ) naar ImageFactory, maar dit is geen Java API ( of typ ik de verkeerde "toetswoorden" in ?).

Zou je een klein voorbeeldje kunnen geven ?
Mijn afbeeldingen steken al in een jar file, maar heb geen flauw benul of hij nu diegene uit de jar file gebruikt, of diegene die ik er gewoon bij het gezet :)

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 16-05 13:05
Zoek eens op factory pattern...
Dan kom je wat verder. :)

Ah vooruit, ik ben in een goede bui, lees en leer: http://www.devdaily.com/java/java_oo/node106.shtml

(Tip, verdiep jezelf ook eens in patterns, het is een waardevolle toevoeging op je programmeurs toolbox en het is nog eens taal onafhankelijk ook... :P)

Een goed startpunt is: Design Patterns van Gamma Helm Johnson en Vlissides.

Zelfs een *ezel* kan aan dat boek komen.

[ Voor 87% gewijzigd door The - DDD op 02-06-2004 20:51 ]


  • yiko
  • Registratie: September 2003
  • Laatst online: 20-04-2025
Thx for the reply. :) :)
Ik heb nu eens zitten zoeken op het Factory pattern en ik denk dat ik het snap. Nu denk ik ook aan mogelijke oplossing.
Maar of dit de oplossing is die jij voor ogen hebt, weet ik dus niet
Here it goes :

Ik maak een class ImageFactory waaraan ik mijn applet meegeef. Als ik dan een getImage() of createImage() vraag aan mijn ImageFactory, gaat deze een image terug geven, maar gaat hij eigenlijk de getImage() van mijn Applet oproepen.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ImageFactory
{
    private Applet myApplet = null;

    public ImageFactory ( Applet applet )
    {
        this.myApplet = applet;
    }

    public Image getImage( String imageName )
    {
        this.myApplet.getImage( this.myApplet.getCodeBase() , imageName );
    }

    public Image createImage( int width, int height )
    {
        this.myApplet.createImage( width , height );
    }
}


Of ik maak het als een interface die ik implementeer op mijn Applet.
En dan geef ik telkens mijn ImageFactory instantie mee met de objecten die ik afbeeldingen wil laten laten/maken etc...

Als ik dan met een gewone java applicatie werk, dan implementeer ik de ImageFactory op bv mijn Frame en die gaat dan werken met Toolkit.getDefaultToolKit... om alles te doen.

Lijkt me een goeie oplossing. Is dit wat je bedoeld, of zitten er gaten in mijn redenering ?
Alvast bedankt voor de moeite

Verwijderd

Als je Swing gebruikt is dit ook een mogelijke oplossing:

Java:
1
Image image = new ImageIcon( getClass().getClassLoader().getResource("<relative image url>") ).getImage();

<relative image url> is een image url relatief aan de codebase URL van je applet.

Dit is niet de meest nette of pure oplossing maar het bespaart je een hoop geëmmer, vooral als je straks met archives gaat werken. Als je het dan nog wat netter wilt maken kun je deze code nog altijd inpakken in een factory.
Pagina: 1