标题:[求助]JFrame背景透明化后留下的问题
取消只看楼主
soita
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-9
 问题点数:0 回复次数:3 
[求助]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编辑过]

搜索更多相关主题的帖子: JFrame背景 import 透明化 java awt 
2007-10-11 18:48
soita
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-9
得分:0 

我的问题是待透明一段时间后就会不停的刷新界面


┈1切┅o. §尽在+.┐`!不言中﹌ОooО°
2007-10-11 21:04
soita
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-9
得分:0 
刚才把main()函数写错了,现在改好了,不需要再重新弄。不过还是出现了刷新的问题

┈1切┅o. §尽在+.┐`!不言中﹌ОooО°
2007-10-11 21:10
soita
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-9
得分:0 

- -..
我没看过<Swing Hacks>
自己找的例子,然后修改的。


┈1切┅o. §尽在+.┐`!不言中﹌ОooО°
2007-10-11 23:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-176832-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.095813 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved