最近老师布置了窗体透明的作业,我提供了两种思路1.使用滑块控制属性调节窗体透明,运行时单击下屏幕左上角的方块出现滑块调节 2.利用屏幕截图,显示窗体下面的背景,映射至窗体容器,实现伪透明。
思路1:
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Opacity extends JFrame{
JSlider slider=new JSlider(0,9,0);
public Opacity(){
this.setTitle("窗体透明度测试");
this.setSize(400,300);
this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
JButton btn=new JButton();
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
setOpacity();
}});
this.add(btn);
this.setUndecorated(true);
this.setVisible(true);
}
public static void main(String[] args) {
Opacity opt= new Opacity();
}
public void setOpacity(){
JDialog dialog =new JDialog(this,"窗体透明度测试",true);
dialog.setSize(270,100);
dialog.setResizable(false);
Dimension thisSize=this.getSize();
Point thisPoint=this.getLocation();
Dimension diaSize=dialog.getSize();
dialog.setLocation(thisPoint.x+(thisSize.width-diaSize.width)/2,
thisPoint.y+(thisSize.height-diaSize.height)/2);
JLabel label=new JLabel("调节透明度:");
slider.addChangeListener(new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
slider();
}});
JPanel upPanel=new JPanel(new FlowLayout());
upPanel.add(label);
upPanel.add(slider);
dialog.add(upPanel,BorderLayout.CENTER);
dialog.setVisible(true);
}
public void slider(){
double value=slider.getValue()/10.0;
if(com.sun.awt.AWTUtilities.isWindowOpaque(this)){
com.sun.awt.AWTUtilities.setWindowOpacity(this, (float)(1-value));
slider.setCursor(new Cursor(Cursor.HAND_CURSOR));
}else{
JOptionPane.showMessageDialog(this, "low");
}
}
}
第二种
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.JFrame;
import javax.swing.JPanel;
public final class Test extends JFrame {
JPanel jp;
Image Background;
Point p0;
Point p1;
public Test() {
jp = new JPanel();
this.getContentPane().add(jp);
try {
Robot r = new Robot();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dm = tk.getScreenSize();
Background = r.createScreenCapture(new Rectangle(0, 0, (int) dm
.getWidth(), (int) dm.getHeight()));
System.out.println(Background);
} catch (Exception e) {
e.printStackTrace();
}
this.setSize(600, 600);
this.setVisible(true);
}
public void paint(Graphics g) {
p0 = this.getLocationOnScreen();
System.out.println(p0);
p1 = new Point(-p0.x, -p0.y);
g.drawImage(Background, p1.x, p1.y, null);
repaint();
}
public static void main(String[] args) {
new Test();
}
}
Comments 2 条评论
不知怎么就进来了,先看看
@weimei 欢迎!