天天看點

java frame 透明,[求助]JFrame背景透明化後留下的問題

[求助]JFrame背景透明化後留下的問題

代碼如下:

問題:我已經将JFrame背景透明化了,但是打開以後總是遇到閣一段時間就重新整理一次的問題,到最後還會一閃一閃的。

很麻煩,請問下有沒有能夠解決的。

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.*;

public class JFrameTransparent extends JComponent implements ComponentListener, WindowFocusListener,Runnable

{

JFrame frame;

Image background;

long lastupdate=0;

boolean refreshRequested = true;

public JFrameTransparent(JFrame frame)throws Exception

{

this.frame = frame;

update();

frame.addComponentListener(this);

frame.addWindowFocusListener(this);

new Thread(this).start();

}

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 update()throws Exception

{

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()));

//createScreenCapture用于建立包含從螢幕中讀取的像素的圖像

}

public void paintComponent(Graphics g)

{

Point pos=this.getLocationOnScreen();

Point offset=new Point(-pos.x,-pos.y);//表示 (x, y) 坐标空間中的位置的點,以整數精度來指定

g.drawImage(background,offset.x,offset.y,null);

}

public void run()

{

try

{

while(true)

{

Thread.sleep(250);

long now = new Date().getTime();

if(refreshRequested &&((now - lastupdate) > 1000))

{

if(frame.isVisible())

{

Point location = frame.getLocation();

frame.hide();

update();

frame.show();

frame.setLocation(location);

refresh();

}

lastupdate = now;

refreshRequested = false;

}

}

}

catch(Exception ee){

}

}

public void refresh()

{

if(frame.isVisible())

{

repaint();

refreshRequested = true;

lastupdate = new Date().getTime();

}

}

public static void main(String args[])throws Exception

{

JFrame frame=new JFrame("我不告訴你");

JFrameTransparent bg = new JFrameTransparent(frame);

bg.setLayout(new BorderLayout());

JTextArea jtf=new JTextArea("this is a text");

bg.add(jtf,BorderLayout.NORTH);

frame.add(bg);

frame.setSize(250,200);

frame.setVisible(true);

}}

[此貼子已經被作者于2007-10-11 21:09:41編輯過]