📄 transparencybaseonbgdrpl.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 + -