| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1793 人关注过本帖
标题:[求助]JFrame背景透明化后留下的问题
只看楼主 加入收藏
soita
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-9
收藏
 问题点数:0 回复次数:7 
[求助]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
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
呵呵,有意思

可惜不是你,陪我到最后
2007-10-11 19:49
枫飘天涯
Rank: 2
来 自:北京
等 级:新手上路
威 望:4
帖 子:251
专家分:0
注 册:2006-10-13
收藏
得分:0 

可能是楼主 的显示器在刷新
我透明之后 就没出现这个问题


*、還⒋聼媽媽德話吧 晩點再戀愛吧
2007-10-11 20:07
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
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
呵呵,是从<Swing Hacks>那本书上搞的吧?

这个方法确实比较巧妙,不过个人认为实用价值不大.

My BlogClick Me
2007-10-11 21:31
soita
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-9
收藏
得分:0 

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


┈1切┅o. §尽在+.┐`!不言中﹌ОooО°
2007-10-11 23:05
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
基本可以确定,列子是出自那本书的.

你可以把这个看作一种尝试,了接一下原理就可以了.但真正的应用里面是不太可能有用的.
因为这种解决方式有很多缺陷.

My BlogClick Me
2007-10-12 00:18
快速回复:[求助]JFrame背景透明化后留下的问题
数据加载中...
 
   



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

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