最近老师布置了窗体透明的作业,我提供了两种思路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(); } }
weimei 2015/06/14 18:41
不知怎么就进来了,先看看
admin 博主 2015/06/16 00:33
@ 欢迎!