Mit Robot an JFrame "vorbeiphotografieren"?

Kai008

Erfahrenes Mitglied
Ich würde gerne emulieren, dass ein JFrame transparent ist. Also kam ich auf die Idee, dass ich das dahinter per Robot "photografiere", und dann einfach als Background zeichne. Ziemlich spät bin ich aber darauf gekommen, dass das garnicht geht, da ja das JFrame im Weg ist. Gibt es da irgend einen Trick um trotzdem an den Hintergrund ranzukommen? Natürlich ohne es kurzfristig auszublenden o. Ä..
 
so könnte es doch gehen, funktioniert dann auch beim resizen, legst noch nen Listener aufs Window wenn es verschoben wird und dann kannst glücklich werden

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class TransparentBackground extends JComponent {
	private Image background;

	public TransparentBackground(JFrame frame) {
		updateBackground();
	}

	public void updateBackground() {
		try {
			Robot rbt = new Robot();
			Toolkit tk = Toolkit.getDefaultToolkit();
			Dimension dim = tk.getScreenSize();
			background = rbt.createScreenCapture(new Rectangle(0, 0, (int) dim
					.getWidth(), (int) dim.getHeight()));
		} catch (Exception ex) {
			System.out.println(ex.toString());
			ex.printStackTrace();
		}
	}

	public void paintComponent(Graphics g) {
		Point pos = this.getLocationOnScreen();
		Point offset = new Point(-pos.x, -pos.y);
		g.drawImage(background, offset.x, offset.y, null);
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		TransparentBackground bg = new TransparentBackground(frame);
		bg.setLayout(new BorderLayout());
		frame.getContentPane().add("Center", bg);
		frame.pack();
		frame.setSize(150, 100);
		frame.setVisible(true);
	}
}
 
Zurück