JFrame paint ohne hintergrund nutzen

coody

Mitglied
Hallo,
ich möchte einen Bildschirmschoner erstellen. Dieser soll wie folgt aussehen:
Wenn der Bildschirmschoner startet, sollen Schneeflocken in Form von Bildern über den Desktop fallen (ähnlich wie der von "Seifenblasenbildschirmschoner" von Windows).
Als erstes habe ich das gesamte Frame transparent gesetzt, dadurch wurden die Schneeflocken natürlich auch transparent.
Jetzt bin ich dazu übergegangen die paint-Metode des JFrames zu nutzen, in dieser geht das Ganze auch, jedoch wird das alte Image nicht gelöscht. Jetzt suche ich eine Methode um alles auf "null" zu setzen und dann die Schneeflocken an einer anderen Position neu zu drawn.

So sieht es aktuell aus.

Ich hoffe ihr könnt mir helfen
Frohe Weihnachten
 
Entweder setzt du den Draw-Modus auf XOR, dann wird erneutes Zeichnen das Alte löschen
Java:
graphics.setXORMode(Color.white);

oder...

Du merkst dir, wo du Schneeflocken hingemalt hast und übermalst diese beim nächsten Durchlauf mit dem Hintergrund.
 
Danke für deine schnelle Antwort,
das mit dem graphics.setXORMode(Color.white); geht bei mir leider nicht. könntest du mir die zweite Möglichkeit noch mal genauer erklären?
 
Ich hab das in die paint Methode geschrieben (g.setXORMode(Color.white)😉 hatte aber keinerlei auswirkungen. Höchstens, dass hier und da ein paar rote pixel zu sehen sind.
 
Ok.

Mein zweites Verfahren ist aber schwieriger umzusetzen. Folgendes ist Pseudocode...

Du speicherst dir den Hintergrund einer Schneeflocke in einem BufferedImage:
Java:
BufferedImage bufferedImage = new  BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics g = bufferedImage .getGraphics();
g.drawImage();

Nachdem du den Hintergrund im bufferedImage hast, malst du deine Schneeflocke auf den Schirm.

Beim nächsten Zyklus zeichnest du statt der Schneeflocke den Hintergrund aus dem BI wieder auf dem Schirm.

Danach änderst du die Koordinaten der Schneeflocke.

Wenn du das für alle Schneeflocken machst, rieselt der Schnee!
 
Ich bekomme es leider nicht hin, kannst du die erste Möglichkeit nochmal erklären? wo genau muss ich das rein schreiben? In die paint Methode selbst?
 

Zurück
Oben