Ich möchte einen vollständig transparenten Hintergrund für einen Frame (oder JFrame) erstellen und eine transparente Animation anzeigen lassen. Ich habe es geschafft, es in Windows 7 x64 arbeiten, aber der gleiche Code läuft nicht auf meinem Linux (Lubuntu x64 15.04).Animation auf transparentem Hintergrund JFrame Linux
Der folgende Code zeigt, was ich versuche zu erreichen - kopieren Sie einfach & fügen Sie es ein. Ich möchte nur, dass sich das kleine Rechteck über den Bildschirm bewegt, ohne eine Spur zu hinterlassen.
static int a = 0;
public static void main(String[] args) {
JFrame f = new JFrame();
f.setUndecorated(true);
f.setBackground(new Color(0, 0, 0, 0));
f.setVisible(true);
f.setSize(512, 512);
f.add(new JPanel() {
@Override
public void paintComponent(Graphics gr) {
Graphics2D g = (Graphics2D)gr;
g.setBackground(new Color(0, 0, 0, 0));
g.clearRect(0, 0, 512, 512);
g.drawRect(a, a++, 2, 2);
}
});
while(true) {
try {
Thread.sleep(30);
} catch(InterruptedException e) {
e.printStackTrace();
}
f.repaint();
}
}
Was ich erreichen möchte (wie in Windows gezeigt) und was ich mit Lubuntu 15.04:
Ich will nur sehen, Das kleine Quadrat bewegt sich genau wie bei Windows 7 - ich möchte keine Spur sehen.
Bitte geben Sie mir nicht den Link von Oracles Transparenz- und Fensterdokumentation - ich habe es dreimal gelesen.
Was ich versucht habe:
- Graphics2D die 'copyArea()' aus einem transparenten Raum. (Diese verwendet AFAIK zu arbeiten, aber nicht tut mehr)
- Glasspane
- AlphaComposite
- SetPaint()
Bitte bitte einfach Ihre Gedanken testen/Code zuerst. Viele der "das sollte funktionieren" Sachen, die ich bereits ausprobiert habe und nicht scheint ... Alle Hilfe wird sehr geschätzt.
Nach vielen Stunden und Stunden, die ich habe es gefunden: Es ist ein Back-Puffer Problem. Ich habe einen Weg gefunden, es auch zu reparieren, aber ich habe jetzt nicht viel Zeit, also werde ich es heute später veröffentlichen. Trotzdem muss es auch unter Windows getestet werden. Meine Lösung scheint etwas zu flimmern, also werde ich wahrscheinlich sehen, ob ich das auch beheben kann. Wie auch immer, ich würde mich sehr über die neue Lösung freuen, da ich nur Windows 7 x64 und Lubuntu 15.04 zur Verfügung habe. Danke Leute. – Roland
kann nicht auf die Antwort warten, und ich werde es auf meinen Computern versuchen: D – JetStream
@JetStream Ich habe eine Antwort unten gepostet. Es funktioniert für Linux und Windows 7 für mich, aber ich besitze keinen Mac, also kann ich das nicht testen ... – Roland