Swing生成一个半透明的窗口

要生成一个半透明的成形窗口,而又要避免使用本地的编码,唯有灵活地应用screenshot(屏幕快照).

半透明窗口是大众对Swing最为渴求的特性之一. 也可以称之为定形窗口,这种窗口有一部分是透明的,可以透过它看到桌面背景和其它的程序.如果不通过JNI(Java Native Interface 本地接口)Java是无法为我们生成一个半透明的窗口的(即使我们可以那样做,还得本地操作平台好支持半透明窗口才行).然而这些现状无法阻止我们对半透明窗口的渴求,通过一个我最喜欢的手段screenshot,我们可以欺骗性地实现这个目的.

仿造这样一个的半透明窗口的过程,主要的通过以下几点:

1.在窗口显示之前,先获得一个screenshot;

2.把上一步获取的屏幕快照,作为窗口的背景图

3.调整位置,以便于我们捕获的screenshot和实际当前的屏幕完美结合,制造出一种半透明的假象.

刚刚说到的部分只是小儿科,重头戏在于,如何在移动或变化半透明窗口时,及时地更新screenshot,也就是及时更新半透明窗口的背景.

在开始我们的旅行之前,先生成一个类,让它继承 JPanel,我们用这个继承类来捕获屏幕,并把捕获的照片作为背景. 类的具体代码如下例6-1

例 6-1 。 半透明背景组件

public class TransparentBackground extends Jcomponent {
   private JFrame frame;
   private Image background;
public TransparentBackground(JFrame frame) {
   this.frame = frame;
   updateBackground( );
}
/**
  * @todo 获取屏幕快照后立即更新窗口背景
  */
public void updateBackground( ) {
   try {
     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( )));
   } catch (Exception ex) {
     //p(ex.toString( ));
// 此方法没有申明过,因为无法得知上下文。因为不影响执行效果,先注释掉它
     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);
}
}

时间: 2024-08-30 08:26:28

Swing生成一个半透明的窗口的相关文章

使用Java Swing 创建一个XML编辑器

xml|创建 我想您一定对XML有所了解,说不定您现在还跃跃欲试想写一段XML文本呢,可是现在能找到的跨平台的.免费的XML编辑器太少了.所以在本文中,我想介绍一下或者说带您一步一步的开发一个简单的XML编辑器,当然我们要用到一些最常见的Java 2 Swing组件,不过这些都是免费的,有些是JDK中的,有些是可以从网上下载的.我想通过本文,你就可以创建一个属于你自己的XML编辑器. 先让我介绍一下本文辑写的思路.首先我想简要的讨论一下XML和为什么树型结构比较适合用来显示XML,然后我们来看一

java生成一个简易的计算器

下面的代码是生成一个简易的计算器. Calculator import java.awt.*; import java.awt.event.*; import javax.swing.*; class CalculatorPanel extends JPanel implements ActionListener { public CalculatorPanel() { setLayout(new BorderLayout()); display = new JTextField("0"

我用VS打开VB.net程序,当我打开一个FORM界面窗口时,然后再关掉FORM界面窗口,则整个VS都关掉了?高手帮忙解决下.谢谢

问题描述 我用VS打开VB.net程序,当我打开一个FORM界面窗口时,然后再关掉FORM界面窗口,则整个VS都关掉了?高手帮忙解决下.谢谢我们用visualsourcesafe备份代码的.如果我的代码是从visualsourcesafe上面拿下来的就会出现这种问题...请高手帮忙解决下,谢谢谢谢,很急!!! 解决方案 解决方案二:难道同样的版本放在本地打开就不存在这个情况?从SourceSafe里面拿出来的打开才会出现?一步一步跟一下咯?解决方案三:重装VS?解决方案四:把项目重新生成一次后再

java-eclipse 下用fat jar插件打包swing生成的jar文件运行提示找不到主类

问题描述 eclipse 下用fat jar插件打包swing生成的jar文件运行提示找不到主类 我用java swing写了一个窗体应用程序,用到了mysql数据库,并且将mysql的jdbc驱动包放在了项目的lib文件夹写,在我将程序用fat jar插件打包后,在命令行下面利用:java -jar +目录test.jar ,运行正常,而当我直接双击运行生成的jar文件后就提示:Could not find the main class...Program will exit. 请问怎么解决这

C#如何做一个半透明的panel,使得可以透出窗体的背景

问题描述 如标题所示,如何做一个半透明的panel,使得可以透出窗体的背景.本人是想在别人做好的UI按钮上直接画个panel或者picturebox点击或者鼠标移动到那里的时候使panel,的背景色改变,如何实现?或者各位大侠,能告诉我在别人做好的整张图片上怎么实现点击按钮处,按钮有反应,这个按钮没有抠出来哦,是在窗口背景的整张图片中的. 解决方案 解决方案二:button.bringtofront??没理解你的需求解决方案三:谢谢回复,就是给整个窗口设置张图片作为背景,这张图片上有按钮这些,我

怎样用swing做一个类似于摇奖的程序

问题描述 怎样用swing做一个类似于摇奖的程序,从100个数字中,每次屏幕显示不重复的5个数字,点停止的时候,屏幕显示当前5个数字.即为中奖号码??? 问题补充:<div class="quote_title">langshao 写道</div><div class="quote_div"><pre name="code" class="java">boolean runnin

myeclipse10.0安装会自动生成一个带空格的文件夹,汉化和使用会报错

问题描述 myeclipse10.0安装会自动生成一个带空格的文件夹,汉化和使用会报错 汉化要求安装路径不能带有空格,但是安装时会自动生成一个myeclipse 10的文件夹,无法汉化,该怎么办?图片说明 尝试过把空格去掉,但这样就无法启动程序会报错 解决方案 汉化版经常会出问题的,建议用英文版 解决方案二: 用英文的貌似也没啥区别吧,不一定要汉化的

在iOS上present一个半透明的viewController

今天尝试着在一个ViewController上面调用: - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated 来展示一个半透明的viewController: UIViewController *vc = [[[UIViewController alloc] init] autorelease]; vc.view.backgroundColor = [U

ASP:生成一个不重复的随即数字

重复 写这个文章绝对是偶然的偶然的机会,前年等一回的 元旦节,和 老婆上街 溜达,猛然想起买上一张福利彩票,结果 屁都没有中上,开春第一天,就写了个预测彩票中奖的程序,这其中的一个很关键的算法就是如何生成一个不重复的随即数字, 大家看完这个程序以后如果中奖,千万不要忘记豆腐了呀:) Sub CalCaPiao() Dim strCaiPiaoNoArr() As String Dim strSQL As String Dim strCaiPiaoNo As String strCaiPiaoNo