V - the type of JLayer's view componentImageObserver, MenuContainer, PropertyChangeListener, Serializable, EventListener, Accessible, Scrollable
public final class JLayer<V extends Component> extends JComponent implements Scrollable, 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 all AWTEvents generated within its borders.  JLayer delegates the handling of painting and input events to a LayerUI object, which performs the actual decoration. 
 The custom painting implemented in the LayerUI 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: Container.add(java.awt.Component)Container.add(String, java.awt.Component)Container.add(java.awt.Component, int)Container.add(java.awt.Component, Object)Container.add(java.awt.Component, Object, int)UnsupportedOperationException to be thrown, to add a component to JLayer use setView(Component) or setGlassPane(JPanel).JComponent.AccessibleJComponent
Container.AccessibleAWTContainer
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
| Constructor | Description | 
|---|---|
| JLayer() | |
| JLayer | Creates a new  JLayerobject with defaultLayerUI. | 
| JLayer | Creates a new  JLayerobject with the specified view component andLayerUIobject. | 
| Modifier and Type | Method | Description | 
|---|---|---|
| protected void | addImpl | This method is not supported by  JLayerand always throwsUnsupportedOperationException | 
| JPanel | createGlassPane() | Called by the constructor methods to create a default  glassPane. | 
| void | doLayout() | Delegates its functionality to the  LayerUI.doLayout(JLayer)method, ifLayerUIis set. | 
| AccessibleContext | getAccessibleContext() | Gets the AccessibleContext associated with this  JLayer. | 
| Border | getBorder() | Delegates its functionality to the  getView().getBorder()method, if the view component is an instance ofjavax.swing.JComponent, otherwise returnsnull. | 
| JPanel | getGlassPane() | Returns the  JLayer's glassPane component ornull. | 
| long | getLayerEventMask() | Returns the bitmap of event mask to receive by this  JLayerand itsLayerUI. | 
| Dimension | getPreferredScrollableViewportSize() | Returns the preferred size of the viewport for a view component. | 
| int | getScrollableBlockIncrement | Returns a scroll increment, which is required for components that display logical rows or columns in order to completely expose one block of rows or columns, depending on the value of orientation. | 
| boolean | getScrollableTracksViewportHeight() | Returns  falseto indicate that the height of the viewport does not determine the height of the layer, unless the preferred height of the layer is smaller than the height of the viewport. | 
| boolean | getScrollableTracksViewportWidth() | Returns  falseto indicate that the width of the viewport does not determine the width of the layer, unless the preferred width of the layer is smaller than the width of the viewport. | 
| int | getScrollableUnitIncrement | Returns a scroll increment, which is required for components that display logical rows or columns in order to completely expose one new row or column, depending on the value of orientation. | 
| LayerUI | getUI() | Returns the  LayerUIfor thisJLayer. | 
| V | getView() | Returns the  JLayer's view component ornull. | 
| boolean | imageUpdate | Delegates its functionality to the  LayerUI.imageUpdate(java.awt.Image, int, int, int, int, int, JLayer)method, if theLayerUIis set. | 
| boolean | isOptimizedDrawingEnabled() | The  JLayeroverrides the default implementation of this method (inJComponent) to returnfalse. | 
| protected boolean | isPaintingOrigin() | Always returns  trueto cause painting to originate fromJLayer, or one of its ancestors. | 
| void | paint | Delegates all painting to the  LayerUIobject. | 
| protected void | paintComponent | This method is empty, because all painting is done by  paint(Graphics)andComponentUI.update(Graphics, JComponent)methods | 
| void | paintImmediately | Delegates its functionality to the  LayerUI.paintImmediately(int, int, int, int, JLayer)method, ifLayerUIis set. | 
| void | propertyChange | This method gets called when a bound property is changed. | 
| void | setBorder | Delegates its functionality to the  getView().setBorder(Border)method, if the view component is an instance ofjavax.swing.JComponent, otherwise this method is a no-op. | 
| void | setGlassPane | Sets the  JLayer's glassPane component, which can benull. | 
| void | setLayerEventMask | Enables the events from JLayer and all its descendants defined by the specified event mask parameter to be delivered to the  LayerUI.eventDispatched(AWTEvent, JLayer)method. | 
| void | setLayout | Sets the layout manager for this container. | 
| void | setUI | Sets the  LayerUIwhich will perform painting and receive input events for thisJLayer. | 
| void | setView | Sets the  JLayer's view component, which can benull. | 
| void | updateUI() | Delegates its functionality to the  LayerUI.updateUI(JLayer)method, ifLayerUIis set. | 
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
public JLayer()
public JLayer(V view)
JLayer object with default LayerUI.view - the component to be decorated by this JLayer
public JLayer(V view, LayerUI<V> ui)
JLayer object with the specified view component and LayerUI object.view - the component to be decoratedui - the LayerUI delegate to be used by this JLayer
public V getView()
JLayer's view component or null. JLayer's view component or null if none existspublic void setView(V view)
JLayer's view component, which can be null. view - the view component for this JLayer
public void setUI(LayerUI<? super V> ui)
LayerUI which will perform painting and receive input events for this JLayer.ui - the LayerUI for this JLayer
public LayerUI<? super V> getUI()
LayerUI for this JLayer.getUI in class JComponent
LayerUI for this JLayer
public JPanel getGlassPane()
JLayer's glassPane component or null. JLayer's glassPane component or null if none existspublic void setGlassPane(JPanel glassPane)
JLayer's glassPane component, which can be null. glassPane - the glassPane component of this JLayer
public JPanel createGlassPane()
glassPane. By default this method creates a new JPanel with visibility set to true and opacity set to false.glassPane
public void setLayout(LayoutManager mgr)
Note: If mgr is non-null, this method will throw an exception as layout managers are not supported on a JLayer.
setLayout in class Container
mgr - the specified layout managerIllegalArgumentException - this method is not supportedpublic void setBorder(Border border)
getView().setBorder(Border) method, if the view component is an instance of javax.swing.JComponent, otherwise this method is a no-op.setBorder in class JComponent
border - the border to be rendered for the view componentpublic Border getBorder()
getView().getBorder() method, if the view component is an instance of javax.swing.JComponent, otherwise returns null.getBorder in class JComponent
view componentprotected void addImpl(Component comp, Object constraints, int index)
JLayer and always throws UnsupportedOperationException
addImpl in class Container
comp - the component to be addedconstraints - an object expressing layout constraints for this componentindex - the position in the container's list at which to insert the component, where -1 means append to the endUnsupportedOperationException - this method is not supportedprotected boolean isPaintingOrigin()
true to cause painting to originate from JLayer, or one of its ancestors.isPaintingOrigin in class JComponent
public void paintImmediately(int x, int y, int w, int h)
LayerUI.paintImmediately(int, int, int, int, JLayer) method, if LayerUI is set.paintImmediately in class JComponent
x - the x value of the region to be paintedy - the y value of the region to be paintedw - the width of the region to be paintedh - the height of the region to be paintedpublic boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h)
LayerUI.imageUpdate(java.awt.Image, int, int, int, int, int, JLayer) method, if the LayerUI is set.imageUpdate in interface ImageObserver
imageUpdate in class Component
img - the image being observedinfoflags - see imageUpdate for more informationx - the x coordinatey - the y coordinatew - the widthh - the heightfalse if the infoflags indicate that the image is completely loaded; true otherwise.public void paint(Graphics g)
LayerUI object.paint in class JComponent
g - the Graphics to render toprotected void paintComponent(Graphics g)
paint(Graphics) and ComponentUI.update(Graphics, JComponent) methodspaintComponent in class JComponent
g - the Graphics object to protectpublic boolean isOptimizedDrawingEnabled()
JLayer overrides the default implementation of this method (in JComponent) to return false. This ensures that the drawing machinery will call the JLayer's paint implementation rather than messaging the JLayer's children directly.isOptimizedDrawingEnabled in class JComponent
public void propertyChange(PropertyChangeEvent evt)
propertyChange in interface PropertyChangeListener
evt - A PropertyChangeEvent object describing the event source and the property that has changed.public void setLayerEventMask(long layerEventMask)
LayerUI.eventDispatched(AWTEvent, JLayer) method.  Events are delivered provided that LayerUI is set for this JLayer and the JLayer is displayable. 
 The following example shows how to correctly use this method in the LayerUI implementations: 
    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       // this LayerUI will receive only key and focus events
       l.setLayerEventMask(AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
    }
    public void uninstallUI(JComponent c) {
       super.uninstallUI(c);
       JLayer l = (JLayer) c;
       // JLayer must be returned to its initial state
       l.setLayerEventMask(0);
    }
  By default JLayer receives no events and its event mask is 0.layerEventMask - the bitmask of event types to receivepublic long getLayerEventMask()
JLayer and its LayerUI.  It means that LayerUI.eventDispatched(AWTEvent, JLayer) method will only receive events that match the event mask. 
 By default JLayer receives no events.
JLayer
public void updateUI()
LayerUI.updateUI(JLayer) method, if LayerUI is set.updateUI in class JComponent
public Dimension getPreferredScrollableViewportSize()
 If the view component of this layer implements Scrollable, this method delegates its implementation to the view component.
getPreferredScrollableViewportSize in interface Scrollable
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
 If the view component of this layer implements Scrollable, this method delegates its implementation to the view component.
getScrollableBlockIncrement in interface Scrollable
visibleRect - The view area visible within the viewportorientation - Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL.direction - Less than zero to scroll up/left, greater than zero for down/right.public boolean getScrollableTracksViewportHeight()
false to indicate that the height of the viewport does not determine the height of the layer, unless the preferred height of the layer is smaller than the height of the viewport.  If the view component of this layer implements Scrollable, this method delegates its implementation to the view component.
getScrollableTracksViewportHeight in interface Scrollable
public boolean getScrollableTracksViewportWidth()
false to indicate that the width of the viewport does not determine the width of the layer, unless the preferred width of the layer is smaller than the width of the viewport.  If the view component of this layer implements Scrollable, this method delegates its implementation to the view component.
getScrollableTracksViewportWidth in interface Scrollable
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
 Scrolling containers, like JScrollPane, will use this method each time the user requests a unit scroll. 
 If the view component of this layer implements Scrollable, this method delegates its implementation to the view component.
getScrollableUnitIncrement in interface Scrollable
visibleRect - The view area visible within the viewportorientation - Either SwingConstants.VERTICAL or SwingConstants.HORIZONTAL.direction - Less than zero to scroll up/left, greater than zero for down/right.public void doLayout()
LayerUI.doLayout(JLayer) method, if LayerUI is set.public AccessibleContext getAccessibleContext()
JLayer.getAccessibleContext in interface Accessible
getAccessibleContext in class Component
JLayer.
    © 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
    https://docs.oracle.com/en/java/javase/21/docs/api/java.desktop/javax/swing/JLayer.html