# getLocation bei applets



## virtualAudio (2. Feb 2007)

Hi Leute, 

möchte einen Screenshot machen. Alles funktioniert, aber ich schaffe es nicht den richtigen Bildausschnitt abzulichten.

(Großen Dank übrigens an L-ectron-X ... dank seiner *bat war es ein Kinderspiel das jar-file zu signieren!!)

Tja, bleibt erstmal nur noch dieses Problem. Der versatz ist sowohl im Viewer von Eclipse als auch online im Browser der Abstand vom 0-Punkt des Fensters bis UNTER das appleteigene Menü. Also die kompletten Leisten/Tabs/etc des Browsers, html Zeug der Seite in dem das applet eingebunden ist (bei mir nur eine zeile mit einem Datum und einer uhrzeit, plus das applet-Hauptmenü oben).

ich hab schon so viel ausprobiert und mir gehen die Ideen aus.

Im moment ist gerade dieser versuch gescheitert.


```
Rectangle r;
Point p = new Point(unten.getLocation());

SwingUtilities.convertPointToScreen(p, this);

r= new Rectangle(p, unten.getSize());
getScreenshot(r);
```

unten ist dabei das anzulichtende JPanel
this ist das Applet

Der Screenshot passiert dann so:

```
BufferedImage bi = new Robot().createScreenCapture(ausschnitt);
```


Vielleicht habt Ihr ja ein paar Ideen. Online ist das applet hier überprüfbar.
(Bestimmte Fenster, wie zB das Ding mit den vielen Strichen ganz unten, bieten die screenshotfunktion über die rechte Maustaste.)

Jede Anregung und jeder Tipp ist gern gesehen!! Daaanke.

beste Grüße
Andi


----------



## André Uhres (4. Feb 2007)

Die Klasse "Robot" ist für diesen Zweck wohl eher ungeeignet.
Versuch's mal so:
Statt einen Screen Capture zu machen, machst du einfach ein BufferedImage von der Component die du ablichten willst:

```
public  BufferedImage generateBufferedImageFromComponent(Component component) {
        BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(component.getBackground());
        g.fillRect(0, 0,  image.getWidth(), image.getHeight());
        component.print(g);
        g.dispose();
        return image;
    }
```

Das heisst, dein Screenshot geht jetzt nicht mehr von einem "Rectangle" aus, sondern von einer "Component":

```
private void doScreenshot(Component comp) {  //<----- Component statt Rectangle
        BufferedImage img = generateBufferedImageFromComponent(comp);
        //img --> als Bilddatei speichern
    }
```


----------



## virtualAudio (7. Feb 2007)

Servus,

danke vielmals André für Dein sehr hilfreiches Posting. Eingebaut und läuft 

Lustig ist, dass ich damals im Sommer, wenn ich mich richtig erinnere mit so einer Version angefangen habe. Über die ganzen nicht funktionierenden Versionen bin ich über die robot und nun wieder zurück zum nun funktionierenden Anfang gekommen. 

Danke!!

Mit besten Grüßen
Andi


----------

