Class JLayer<V extendsComponent>

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JLayer<V>
Type Parameters:
V - the type ofJLayer's view component
All Implemented Interfaces:
ImageObserver,MenuContainer,PropertyChangeListener,Serializable,EventListener,Accessible,Scrollable

public final classJLayer<V extendsComponent>extendsJComponentimplementsScrollable,PropertyChangeListener,Accessible
JLayer is a universal decorator for Swing components which enables you to implement various advanced painting effects as well as receive notifications of allAWTEvents generated within its borders.

JLayer delegates the handling of painting and input events to aLayerUI object, which performs the actual decoration.

The custom painting implemented in theLayerUI and events notification work for the JLayer itself and all its subcomponents. This combination enables you to enrich existing components by adding new advanced functionality such as temporary locking of a hierarchy, data tips for compound components, enhanced mouse scrolling etc and so on.

JLayer is a good solution if you only need to do custom painting over compound component or catch input events from its subcomponents.

 import javax.swing.*; import javax.swing.plaf.LayerUI; import java.awt.*; public class JLayerSample {     private static JLayer<JComponent> createLayer() {         // This custom layerUI will fill the layer with translucent green         // and print out all mouseMotion events generated within its borders         LayerUI<JComponent> layerUI = new LayerUI<JComponent>() {             public void paint(Graphics g, JComponent c) {                 // paint the layer as is                 super.paint(g, c);                 // fill it with the translucent green                 g.setColor(new Color(0, 128, 0, 128));                 g.fillRect(0, 0, c.getWidth(), c.getHeight());             }             public void installUI(JComponent c) {                 super.installUI(c);                 // enable mouse motion events for the layer's subcomponents                 ((JLayer) c).setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK);             }             public void uninstallUI(JComponent c) {                 super.uninstallUI(c);                 // reset the layer event mask                 ((JLayer) c).setLayerEventMask(0);             }             // overridden method which catches MouseMotion events             public void eventDispatched(AWTEvent e, JLayer<? extends JComponent> l) {                 System.out.println("AWTEvent detected: " + e);             }         };         // create a component to be decorated with the layer         JPanel panel = new JPanel();         panel.add(new JButton("JButton"));         // create the layer for the panel using our custom layerUI         return new JLayer<JComponent>(panel, layerUI);     }     private static void createAndShowGUI() {         final JFrame frame = new JFrame();         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         // work with the layer as with any other Swing component         frame.add(createLayer());         frame.setSize(200, 200);         frame.setLocationRelativeTo(null);         frame.setVisible(true);     }     public static void main(String[] args) throws Exception {         SwingUtilities.invokeAndWait(new Runnable() {             public void run() {                 createAndShowGUI();             }         });     } }
Note:JLayer doesn't support the following methods: using any of them will causeUnsupportedOperationException to be thrown, to add a component toJLayer usesetView(Component) orsetGlassPane(JPanel).

Since:
1.7
See Also: