什么是Java本机访问(JNA) ?
JNA使Java程序可以轻松访问本机共享库(Windows上的DLL),而无需编写Java代码-无需JNI或本机代码。JNA允许您使用自然Java方法调用直接调用本机函数。
编码
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import com.sun.jna.platform.WindowUtils;public class TransparentFrame extends JFrame {public TransparentFrame() {setTitle('Transparent Frame');setSize(400,400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JSlider slider = new JSlider(JSlider.HORIZONTAL, 30, 100, 100);slider.addChangeListener(new ChangeListener() {@Overridepublic void stateChanged(ChangeEvent e) {JSlider slider = (JSlider) e.getSource();if(!slider.getValueIsAdjusting()){WindowUtils.setWindowAlpha(TransparentFrame.this, slider.getValue()/100f);}}});add(slider);setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new TransparentFrame();}});}
}
JNA jar(platform.jar)中提供了WindowUtils类。 WindowUtils类的方法setWindowAlpha 用于使窗口透明。 此方法的第一个参数是您的框架/窗口,第二个参数是alpha值。 此类还具有一个称为setWindowTransparent的方法,该方法还可用于使窗口透明。
依存关系
您将需要以下2个jar运行该程序:(两个jar文件都可以从GitHub上的JNA下载)。
- jna.jar
- platform.jar
要在Windows上运行以上代码,您需要在调用WindowUtils函数之前设置“ sun.java2d.noddraw”系统属性。
System.setProperty('sun.java2d.noddraw', 'true');
输出量
补充笔记
我已经在以下机器上测试了此代码:
- Windows XP Service Pack 3(32位)
- Windows 7(32位)
- Cent OS 5(32位)
如果您在其他计算机上对其进行测试,或者具有使用JNA的其他计算机代码以实现相同功能,则可以随时将其作为对此文章的评论进行共享。
祝您编程愉快,别忘了分享!
参考: harryjoy博客上使用我们JCG合作伙伴 Harsh Raval的JNA使用的透明JFrame 。
翻译自: https://www.javacodegeeks.com/2012/09/transparent-jframe-using-jna.html