Sunday, December 14, 2008

AWT(Transparent Background Using JComponent )

import java.awt.*;
import java.util.Date;
import javax.swing.*;
import java.awt.event.*;

public class BGTest1
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Transparent Window");
TransparentBackground bg = new TransparentBackground(frame);
bg.setLayout(new BorderLayout());

JLabel label = new JLabel("This is a label");
bg.add("North",label);
frame.getContentPane().add("Center",bg);
frame.pack();
frame.setSize(300,300);
frame.show();
}
}

class TransparentBackground extends JComponent implements ComponentListener, WindowFocusListener
{
private JFrame frame;
protected Image background;
private long lastupdate = 0;
public boolean refreshRequested = true;
public Robot rbt = null;
public Toolkit tk = null;
public Dimension dim = null;

public TransparentBackground(JFrame frame)
{
this.frame = frame;
updateBackground();
frame.addComponentListener(this);
frame.addWindowFocusListener(this);
}

public void updateBackground()
{
try
{
rbt = new Robot();
tk = Toolkit.getDefaultToolkit();
dim = tk.getScreenSize();
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth(),(int)dim.getHeight()));
}catch(Exception ex)
{
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 void componentShown(ComponentEvent evt) { repaint(); }
public void componentResized(ComponentEvent evt) { repaint(); }
public void componentMoved(ComponentEvent evt) { repaint(); }
public void componentHidden(ComponentEvent evt) { }

public void windowGainedFocus(WindowEvent evt) { refresh(); }
public void windowLostFocus(WindowEvent evt) { refresh(); }

public void refresh(){
if(this.isVisible() && frame.isVisible()) {
repaint();
refreshRequested = true;
lastupdate = new Date().getTime();
}
}
}

No comments:

Post a Comment