行者买刀 发表于 2013-2-7 15:08:34

利用JNA实现透明(图片透明,自定义不规则多边形透明)

          自Windows的透明技术出现以后,它的漂亮的外观一直为很多程序员所爱.目前jdk 6 u 10已经把透明这块相应的包加进来了,需要的程序员可以去下载了.这里就介绍下怎么使用JNA实现透明.先看下面的代码吧:
         
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.lgh.lucency;import com.lgh.pic.Pic;import com.sun.jna.examples.WindowUtils;import java.awt.BorderLayout;import java.awt.Graphics;import java.awt.Polygon;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.ToolTipManager;/** * * @author lgh */public class LucencyTest2 {    public LucencyTest2() {      this.initJFrame();    }    public static void main(String[] args) {      ToolTipManager.sharedInstance().setInitialDelay(0);      ToolTipManager.sharedInstance().setLightWeightPopupEnabled(true);      new LucencyTest2();    }    private void initJFrame() {      final JFrame jf = new JFrame("透明");      jf.setUndecorated(true);      jf.setSize(400, 300);      jf.setLayout(new BorderLayout());      JPanel jp = new JPanel() {            @Override            protected void paintComponent(Graphics g) {                super.paintComponent(g);                g.drawImage(Pic.statResult, 0, 0, jf);             }      };//      jp.setToolTipText("<html><center><font color=blue size=+2>" +//                "ToolTipDemo.moo" + "</font></center></html>");//      jp.setToolTipText("<html><center><font face=AvantGarde size=+1 color=white>" +//                ("ToolTipDemo.got_milk") + "</font></center></html>");      jf.add(jp, BorderLayout.CENTER);      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      jf.setLocationRelativeTo(null);      //移动      MouseMotionUtil mmu = new MouseMotionUtil();      mmu.addMouseMotionListener(jf, jp);      //透明      //1.根据图片来透明//      WindowUtils.setWindowAlpha(jf, 0.01F);//      WindowUtils.setWindowMask(jf, new ImageIcon(Pic.statResult));      //2.根据shape外观来进行做形状      //2.1简单的圆//      RoundRectangle2D.Float mask = new RoundRectangle2D.Float(0, 0, jf.getWidth(),jf.getHeight(), 100, 100);//      WindowUtils.setWindowMask(jf, mask);      //2.2另一种不规则外形      Polygon polygon = new Polygon();      polygon.addPoint(200, 300);      polygon.addPoint(400, 0);      polygon.addPoint(0, 0);      WindowUtils.setWindowMask(jf, polygon);      jf.setVisible(true);    }} 根据图片透明的效果如下:
   
http://www.agoit.com/upload/attachment/95346/39a90524-551e-30c2-96a9-784f0cf35bfd.png
根据四边形透明的如下:
  

http://www.agoit.com/upload/attachment/95344/71f2d115-4697-35a0-a94b-e03923b3ed57.png
 
 
根据三角形的透明的效果如下:
  
http://www.agoit.com/upload/attachment/95342/56ff5fcf-4041-3d77-86f7-e87aeeb97b05.png
 
 
 
页: [1]
查看完整版本: 利用JNA实现透明(图片透明,自定义不规则多边形透明)