webForumDet fria alternativet

Javaapplet till bild?!? hmm?

4 svar · 461 visningar · startad av Sunix

SunixMedlem sedan juli 2004310 inlägg
#1

Hej!

Jag har skapat en Applet för att visa statistik grafiskt. Diagram osv.
Appleten finns bl.a. inlaggd på en elektronisk enkät där huvudmannen för enkäten kan direkt se statistiken via en webbsida och min Applet.

Jag har en fundering nu om att lagra sidan i wordformat via en knapp och detta är inget problem men...
Appleten visas i word som ett object inte som diagram vilket inte är så konstigt.

Kan man göra om appletens bild, utseende, gränssnitt(typ en printscreen) till en jpg eller gif på något sätt så att jag senare kan spara ner hela sidan till .doc??

phonkworksMedlem sedan juli 2001228 inlägg
#2

Ja det går. Har råkat ut för liknade problem när en kund ville kunna skriva ut
det en applet visade.

Jag gjorde så att en servlet skapade en virtuell Frame som fick rendera samma bild som appleten och via Acme.JPM.Encoders.GifEncoder (http://www.acme.com/resources/classes/Acme.tar.gz) skapa en gif som sen kunde visas på siten och skrivas ut.

Stökigt som f-n men enklare än att få appletten utskriven :)

En downside på detta är att det inte funkar på Linux maskiner om dom inte kör nån X-server. JVMen känner att det inte finns nån grafisk miljö igång och vägrar då att skapa Framen. På windowsburkar funkar det default.

mvh
phonk

SunixMedlem sedan juli 2004310 inlägg
#3

Hmm, det verkar vara väldigt avancerat!
hur skapade du den virtuella framen? Har du mer detaljer?

phonkworksMedlem sedan juli 2001228 inlägg
#4

Du gör en klass som är en "kopia" på din applet fast istället för att "extenda" Applet/JApplet extendar du Frame/JFrame.

Finns många tutorials på nätet som berättar hur man omvandlar en Applet till en Frame.

Precis som i din Applet måste din Frame-klass ha en paint metod som också då ska vara en kopia på din Applets paint metod. Det är ju där bilden ritas.

nåt sånt här alltså:

public void paint(Graphics g) {
      super.paint(g);
      // Dina rit instruktioner här
}

Sen lägger du in detta för att skapa giffen:

    public boolean createGif(String filename) {
        boolean result = false;
        try {
            /*
             * Jag sätter sessions id't som filnamn plus ".gif" så blandar man inte ihop
             * bilder mellan användare och det blir lätt att hämta bilden.
             */
            FileOutputStream fo = new FileOutputStream(new java.io.File(filename));
            
            BufferedImage img = new BufferedImage(mainX, mainY, BufferedImage.TYPE_BYTE_INDEXED);
            Graphics g = img.getGraphics();
            paint(g);
            Acme.JPM.Encoders.GifEncoder enc = new Acme.JPM.Encoders.GifEncoder(img,fo);
            enc.encode();
            fo.flush();
            fo.close();            
            result = true;
        } catch(Exception e) { e.printStackTrace(); }

        return result;
    }

Servleten anropar sen detta så här:

ImageFrame imgf = new ImageFrame();
imgf.show();
if(imgf.createGif(/*SESSION_ID Här*/)) {
    // Funkade
} else {
   // Funkade inte
}

imgf.dispose();

Problemet är att skapa Framen med samma värden etc så dina diagram och sånt visar det dom ska. Jag hade turen att från början bygga upp grafiken via en XMLrepresentation, så det var ju bara att från Applteten skicka ner en XML sträng till Servleten så ImageFrame visste vad den skulle rita i paint(). Vet inte hur du kan lösa det men det klurar du nog ut.

mvh
phonk

SunixMedlem sedan juli 2004310 inlägg
#5

Ahaa, detta verkar lovande!
Tack så mycket!

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)