用jnr.jar可以实现JFrame的透明效果,但是透明的太彻底,连里面的控件都透明了,有没有什么办法可以只让JFrame的背景透明,而其他不受影响。
解决方案 »
- 为什么log4j连不了数据库
- java绘图后菜单栏看不见,鼠标点一下才能看见
- 关于取Oracle sequence的怪问题,急。。。
- 初学java,想找为师傅,肯定是有尝报酬!
- applet通过servlet访问数据库!
- 初学者:java的applet中如何使用延时(sleep)?
- 那位有NOKIA NEU SMIAS1.5的java编程资料或DEMO,能发给我一份吗?感激不禁啊!
- 高分求教关于String的问题!
- 在java中怎样才能访问ic卡?
- 求 JBuilder 书
- JAVA的一个小项目拿回家出了点问题。求指教。。谢谢了、在线等
- 求Fibonacci数列:1,1,2,3,5,8,...第40个数的值.
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);
}}