⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transparencybaseonbgdrpl.java

📁 SWT 基础编程源码
💻 JAVA
字号:
package com.jixy.baseOnAWT;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TransparencyBaseOnBgdRpl extends JComponent {
	private JFrame frame;

	private Image background;

	public TransparencyBaseOnBgdRpl(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) {
			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);
	}

	// 构造方法把一个reference保存到父的JFrame,然后调用updateBackground()方法,在这个方法中,
	// 我们可以利用java.awt.Robot类捕获到整个屏幕,并把捕获到的图像保存到一个定义了的放置背景的变量中.
	// paintComponent()方法可以帮助我们获得窗口在屏幕上的绝对位置,并用刚刚得到的背景作为panel的背景图,
	// 同时这个背景图会因为panel位置的不同而作对应的移动,以使panel的背景和panel覆盖的那部分屏幕图像无缝重叠在一起,
	// 同时也就使panel和周围的屏幕关联起来.

	// 通过下面这个main方法简单的运行一下,随便放置一些组件到panel上,再把panel放置到frame中显示.
	public static void main(String[] args) {
		 JFrame frame = new JFrame("Transparent Window");
		 TransparencyBaseOnBgdRpl bg = new TransparencyBaseOnBgdRpl(frame);
		 bg.setLayout(new BorderLayout());
		 JButton button = new JButton("This is a button");
		 bg.add("North", button);
		 JLabel label = new JLabel("This is a label");
		 bg.add("South", label);
		 frame.getContentPane().add("Center", bg);
		 frame.pack();
		 frame.setSize(150, 100);
		 frame.show();
		// JFrame frame = new JFrame("Transparent Window");
		// JButton button = new JButton("This is a button");
		// JLabel label = new JLabel("This is a label");
		// frame.getContentPane().add("North", button);
		// frame.getContentPane().add("South", label);
		// frame.pack();
		// frame.setSize(150, 100);
		// frame.show();
		// frame.setOpaque
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -