Transparent JFrame using JNA

In Make JFrame transparent I had shown a way to making frame’s transparent using AWTUtilities class. But using that class results in access restriction compile time error, resolution in Eclipse is also shown in that post. Now here is the version using java natives. I have used Java Native Access (JNA) library to call native functions to get the things done.

What is Java Native Access (JNA)?

JNA provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code—no JNI or native code is required.JNA allows you to call directly into native functions using natural Java method invocation.

The Code

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() {
         @Override
         public 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() {
	 @Override
	 public void run() {
	    new TransparentFrame();
	 }
      });
   }
}

Here WindowUtils class is provided in JNA jar (platform.jar). The method setWindowAlpha of WindowUtils class is used to make a window transparent. First argument of this method is your frame/window and second argument is alpha value. This class also has a method called setWindowTransparent, which can also be used to make window transparent .

Dependencies

You will need following 2 jars to run this program: (Both jar files are available to download on GitHub for JNA.)

  • jna.jar
  • platform.jar

To run above code on Windows, you will need to set “sun.java2d.noddraw” system property before calling the WindowUtils function.

System.setProperty("sun.java2d.noddraw", "true");

Output

Additional Notes

I have tested this code on following machines:

  • Windows XP service pack 3 (32 bit)
  • Windows 7 (32 bit)
  • Cent OS 5 (32 bit)

If you test it on other machines or have code for other machines using JNA for the same functionality then feel free to share it as comment to this post.

2 thoughts on “Transparent JFrame using JNA

  1. hello,
    i need to make a transparent notification window..i have seen how u made the notification window…but i need to make it transparent can you help me with that

    1. Hi,

      To make a transparent notification alert, you need to combine my posts about making frame transparent and creating pop up window.

      If you have successfully created pop up window then now you just need to add code of making it transparent. You have 2 ways to do it, one is using JNA and another is without using any external jar. Both ways are easy, just copy/paste the corresponding part of the code from my post to your frame.

      And if you are looking for light box kind of thing then you should read my post about light box jar. You can easily find it in open source page.

      Let me know if require more help.

      Keep visiting the site for more cool stuff!!!!!!

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.