Desktop Java
Java 7 Swing: Creating Translucent and Shaped Windows
Java 7 Swing supports windows with transparency and non-rectangular shapes. The following screenshot shows a circular window created with 75% opacity.
You can create a translucent window by altering its opacity using the setOpacity
method on a JFrame
. Note that you can only create translucent windows if the underlying operating system supports them. Also, ensure that the window is undecorated by calling setUndecorated(true)
.
To change the shape of the window, call the setShape
method inside the componentResized
method, so that if the window is resized, the shape is recalculated as well.
Sample code to create a translucent, circular window is shown below:
import java.awt.Color; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.GridBagLayout; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.geom.Ellipse2D; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.SwingUtilities; public class TranslucentCircularFrame extends JFrame { /** * Creates a frame containing a text area and a button. The frame has a * circular shape and a 75% opacity. */ public TranslucentCircularFrame() { super("Translucent Circular Frame"); setLayout(new GridBagLayout()); final JTextArea textArea = new JTextArea(3, 50); textArea.setBackground(Color.GREEN); add(textArea); setUndecorated(true); // set the window's shape in the componentResized method, so // that if the window is resized, the shape will be recalculated addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { setShape(new Ellipse2D.Double(0, 0, getWidth(), getHeight())); } }); // make the window translucent setOpacity(0.75f); setLocationRelativeTo(null); setSize(250, 250); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { // Create the GUI on the event-dispatching thread SwingUtilities.invokeLater(new Runnable() { @Override public void run() { GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment(); // check if the OS supports translucency if (ge.getDefaultScreenDevice().isWindowTranslucencySupported( GraphicsDevice.WindowTranslucency.TRANSLUCENT)) { new TranslucentCircularFrame(); } } }); } }
Reference: Java 7 Swing: Creating Translucent and Shaped Windows from our JCG partner Fahd Shariff at the fahd.blog blog.
Graphics in java swing is really complicated. This tutorial really helped, thanks.