利用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);
    }
}

 根据图片透明的效果如下:

   

根据四边形透明的如下:

  


 
 

根据三角形的透明的效果如下:

  

 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值