package com.jogamp.opengl.test.junit.jogl.tile;
import java.awt.*;
import javax.swing.*;
import java.lang.reflect.Method;
public class TransparentPanel extends JPanel {
public TransparentPanel() {
super.setOpaque(false);
setMixingCutoutShape(new Rectangle());
}
@Override
public void setOpaque(final boolean isOpaque) {
// Don't let this panel become opaque
}
/**
* Helper utility needed to implement TransparentPanel.
* This class provides the ability to cut out the background of a lightweight
* panel so that it can be layered on top of a heavyweight component and have
* the heavyweight component show through. For more infromation, see:
*
* http://today.java.net/article/2009/11/02/transparent-panel-mixing-heavyweight-and-lightweight-components
*/
private static Method mSetComponentMixing;
/**
* Set the cut out shape on a given Component.
*
* @param c The Component on which to set the cut out shape.
* @param s The shape to cut out of the given Component.
*/
public void setMixingCutoutShape(final Shape s)
{
// Get the cut out shape method
if (mSetComponentMixing == null) {
try {
final Class<?> awtUtilitiesClass =
Class.forName("com.sun.awt.AWTUtilities");
mSetComponentMixing =
awtUtilitiesClass.getMethod(
"setComponentMixingCutoutShape",
Component.class, Shape.class);
} catch (final Exception ex) {
ex.printStackTrace();
}
}
// Cut out the shape
if (mSetComponentMixing != null) {
try {
mSetComponentMixing.invoke( null, this, s );
} catch (final Exception ex) {
ex.printStackTrace();
}
}
}
}