# Class LayerUI<V extends Component>

java.lang.Object
javax.swing.plaf.ComponentUI
javax.swing.plaf.LayerUI<V>

Type Parameters:
  `V` - one of the super types of `JLayer`'s view component

All Implemented Interfaces:
  `Serializable`

public class LayerUI<V extends Component> extends ComponentUI implements Serializable
The base class for all `JLayer`'s UI delegates.

`paint(java.awt.Graphics, javax.swing.JComponent)` method performs the painting of the `JLayer` and `eventDispatched(AWTEvent, JLayer)` method is notified about any `AWTEvent`s which have been generated by a `JLayer` or any of its subcomponents.

The `LayerUI` differs from the UI delegates of the other components, because it is LookAndFeel independent and is not updated by default when the system LookAndFeel is changed.

The subclasses of `LayerUI` can either be stateless and shareable by multiple `JLayer`s or not shareable.

Since:
  1.7
See Also:
  - `JLayer.setUI(LayerUI)`
  - `JLayer.setView(Component)`
  - `JLayer.getView()`

## Constructor Summary

Constructors
Constructor
Description
`LayerUI()`
Constructs a `LayerUI`.

## Method Summary

Modifier and Type
Method
Description
`void`
`addPropertyChangeListener(PropertyChangeListener listener)`
Adds a PropertyChangeListener to the listener list.
`void`
`addPropertyChangeListener(String propertyName, PropertyChangeListener listener)`
Adds a PropertyChangeListener to the listener list for a specific property.
`void`
`applyPropertyChange(PropertyChangeEvent evt, JLayer<? extends V> l)`
Notifies the `LayerUI` when any of its property are changed and enables updating every `JLayer` this `LayerUI` instance is set to.
`void`
`doLayout(JLayer<? extends V> l)`
Causes the passed instance of `JLayer` to lay out its components.
`void`
`eventDispatched(AWTEvent e, JLayer<? extends V> l)`
Processes `AWTEvent`s for `JLayer` and all its descendants to this `LayerUI` instance.
`protected void`
`firePropertyChange(String propertyName, Object oldValue, Object newValue)`
Support for reporting bound property changes for Object properties.
`int`
`getBaseline(JComponent c, int width, int height)`
If the `JLayer`'s view component is not `null`, this calls the view's `getBaseline()` method.
`Component.BaselineResizeBehavior`
`getBaselineResizeBehavior(JComponent c)`
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getBaselineResizeBehavior()` method.
`Dimension`
`getMaximumSize(JComponent c)`
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getMaximumSize()` method.
`Dimension`
`getMinimumSize(JComponent c)`
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getMinimalSize()` method.
`Dimension`
`getPreferredSize(JComponent c)`
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getPreferredSize()` method.
`PropertyChangeListener[]`
`getPropertyChangeListeners()`
Returns an array of all the property change listeners registered on this component.
`PropertyChangeListener[]`
`getPropertyChangeListeners(String propertyName)`
Returns an array of all the listeners which have been associated with the named property.
`boolean`
`imageUpdate(Image img, int infoflags, int x, int y, int w, int h, JLayer<? extends V> l)`
Delegates its functionality to the default implementation of the `JLayer.imageUpdate` method which is inherited from `JLayer`'s base classes.
`void`
`installUI(JComponent c)`
Configures the `JLayer` this `LayerUI` is set to.
`void`
`paint(Graphics g, JComponent c)`
Paints the specified component.
`void`
`paintImmediately(int x, int y, int width, int height, JLayer<? extends V> l)`
Paints the specified region in the `JLayer` this `LayerUI` is set to, immediately.
`protected void`
`processComponentEvent(ComponentEvent e, JLayer<? extends V> l)`
Processes component events occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processFocusEvent(FocusEvent e, JLayer<? extends V> l)`
Processes focus events occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processHierarchyBoundsEvent(HierarchyEvent e, JLayer<? extends V> l)`
Processes hierarchy bounds event occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processHierarchyEvent(HierarchyEvent e, JLayer<? extends V> l)`
Processes hierarchy event occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processInputMethodEvent(InputMethodEvent e, JLayer<? extends V> l)`
Processes input event occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processKeyEvent(KeyEvent e, JLayer<? extends V> l)`
Processes key events occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processMouseEvent(MouseEvent e, JLayer<? extends V> l)`
Processes mouse events occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processMouseMotionEvent(MouseEvent e, JLayer<? extends V> l)`
Processes mouse motion event occurring on the `JLayer` or any of its subcomponents.
`protected void`
`processMouseWheelEvent(MouseWheelEvent e, JLayer<? extends V> l)`
Processes mouse wheel event occurring on the `JLayer` or any of its subcomponents.
`void`
`removePropertyChangeListener(PropertyChangeListener listener)`
Removes a PropertyChangeListener from the listener list.
`void`
`removePropertyChangeListener(String propertyName, PropertyChangeListener listener)`
Removes a `PropertyChangeListener` from the listener list for a specific property.
`void`
`uninstallUI(JComponent c)`
Reverses the configuration which was previously set in the `installUI(JComponent)` method.
`void`
`updateUI(JLayer<? extends V> l)`
Invoked when `JLayer.updateUI()` is called by the `JLayer` this `LayerUI` is set to.

### Methods declared in class ComponentUI

`contains, createUI, getAccessibleChild, getAccessibleChildrenCount, update`

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### LayerUI

public LayerUI()
Constructs a `LayerUI`.

## Method Details

### paint

public void paint(Graphics g, JComponent c)
Paints the specified component. Subclasses should override this method and use the specified `Graphics` object to render the content of the component.

The default implementation paints the passed component as is.

Overrides:
  `paint` in class `ComponentUI`
Parameters:
  `g` - the `Graphics` context in which to paint
  `c` - the component being painted
See Also:
  - `ComponentUI.update(Graphics, JComponent)`

### eventDispatched

public void eventDispatched(AWTEvent e, JLayer<? extends V> l)
Processes `AWTEvent`s for `JLayer` and all its descendants to this `LayerUI` instance.

To enable the `AWTEvent`s of a particular type, you call `JLayer.setLayerEventMask(long)` in `installUI(javax.swing.JComponent)` and set the layer event mask to `0` in `uninstallUI(javax.swing.JComponent)` after that. By default this method calls the appropriate `process<event` `type>Event` method for the given class of event.

Note: Events are processed only for displayable `JLayer`s.

Parameters:
  `e` - the event to be dispatched
  `l` - the layer this LayerUI is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `Component.isDisplayable()`
  - `processComponentEvent(ComponentEvent, JLayer)`
  - `processFocusEvent(FocusEvent, JLayer)`
  - `processKeyEvent(KeyEvent, JLayer)`
  - `processMouseEvent(MouseEvent, JLayer)`
  - `processMouseMotionEvent(MouseEvent, JLayer)`
  - `processInputMethodEvent(InputMethodEvent, JLayer)`
  - `processHierarchyEvent(HierarchyEvent, JLayer)`
  - `processMouseWheelEvent(MouseWheelEvent, JLayer)`

### processComponentEvent

protected void processComponentEvent(ComponentEvent e, JLayer<? extends V> l)
Processes component events occurring on the `JLayer` or any of its subcomponents.

This method is not called unless component events are enabled for the `JLayer` objects, this `LayerUI` is set to. Component events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.COMPONENT_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `ComponentEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processFocusEvent

protected void processFocusEvent(FocusEvent e, JLayer<? extends V> l)
Processes focus events occurring on the `JLayer` or any of its subcomponents.

This method is not called unless focus events are enabled for the `JLayer` objects, this `LayerUI` is set to. Focus events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.FOCUS_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `FocusEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processKeyEvent

protected void processKeyEvent(KeyEvent e, JLayer<? extends V> l)
Processes key events occurring on the `JLayer` or any of its subcomponents.

This method is not called unless key events are enabled for the `JLayer` objects, this `LayerUI` is set to. Key events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.KEY_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `KeyEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processMouseEvent

protected void processMouseEvent(MouseEvent e, JLayer<? extends V> l)
Processes mouse events occurring on the `JLayer` or any of its subcomponents.

This method is not called unless mouse events are enabled for the `JLayer` objects, this `LayerUI` is set to. Mouse events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.MOUSE_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `MouseEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processMouseMotionEvent

protected void processMouseMotionEvent(MouseEvent e, JLayer<? extends V> l)
Processes mouse motion event occurring on the `JLayer` or any of its subcomponents.

This method is not called unless mouse motion events are enabled for the `JLayer` objects, this `LayerUI` is set to. Mouse motion events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `MouseEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processMouseWheelEvent

protected void processMouseWheelEvent(MouseWheelEvent e, JLayer<? extends V> l)
Processes mouse wheel event occurring on the `JLayer` or any of its subcomponents.

This method is not called unless mouse wheel events are enabled for the `JLayer` objects, this `LayerUI` is set to. Mouse wheel events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.MOUSE_WHEEL_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `MouseEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processInputMethodEvent

protected void processInputMethodEvent(InputMethodEvent e, JLayer<? extends V> l)
Processes input event occurring on the `JLayer` or any of its subcomponents.

This method is not called unless input events are enabled for the `JLayer` objects, this `LayerUI` is set to. Input events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.INPUT_METHOD_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `InputMethodEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processHierarchyEvent

protected void processHierarchyEvent(HierarchyEvent e, JLayer<? extends V> l)
Processes hierarchy event occurring on the `JLayer` or any of its subcomponents.

This method is not called unless hierarchy events are enabled for the `JLayer` objects, this `LayerUI` is set to. Hierarchy events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.HIERARCHY_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `HierarchyEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### processHierarchyBoundsEvent

protected void processHierarchyBoundsEvent(HierarchyEvent e, JLayer<? extends V> l)
Processes hierarchy bounds event occurring on the `JLayer` or any of its subcomponents.

This method is not called unless hierarchy bounds events are enabled for the `JLayer` objects, this `LayerUI` is set to. Hierarchy bounds events are enabled in the overridden `installUI(JComponent)` method and should be disabled in the `uninstallUI(JComponent)` method after that.

    public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       l.setLayerEventMask(AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK);
    }

    public void uninstallUI(JComponent c) {
        super.uninstallUI(c);
        JLayer l = (JLayer) c;
        l.setLayerEventMask(0);
    }

Parameters:
  `e` - the `HierarchyEvent` to be processed
  `l` - the layer this `LayerUI` instance is set to
See Also:
  - `JLayer.setLayerEventMask(long)`
  - `installUI(javax.swing.JComponent)`
  - `uninstallUI(javax.swing.JComponent)`

### updateUI

public void updateUI(JLayer<? extends V> l)
Invoked when `JLayer.updateUI()` is called by the `JLayer` this `LayerUI` is set to.

Parameters:
  `l` - the `JLayer` which UI is updated

### installUI

public void installUI(JComponent c)
Configures the `JLayer` this `LayerUI` is set to. The default implementation registers the passed `JLayer` component as a `PropertyChangeListener` for the property changes of this `LayerUI`.

Overrides:
  `installUI` in class `ComponentUI`
Parameters:
  `c` - the `JLayer` component where this UI delegate is being installed
See Also:
  - `ComponentUI.uninstallUI(JComponent)`
  - `JComponent.setUI(ComponentUI)`
  - `JComponent.updateUI()`

### uninstallUI

public void uninstallUI(JComponent c)
Reverses the configuration which was previously set in the `installUI(JComponent)` method. The default implementation unregisters the passed `JLayer` component as a `PropertyChangeListener` for the property changes of this `LayerUI`.

Overrides:
  `uninstallUI` in class `ComponentUI`
Parameters:
  `c` - the component from which this UI delegate is being removed.
See Also:
  - `ComponentUI.installUI(JComponent)`
  - `JComponent.updateUI()`

### addPropertyChangeListener

public void addPropertyChangeListener(PropertyChangeListener listener)
Adds a PropertyChangeListener to the listener list. The listener is registered for all bound properties of this class.

If `listener` is `null`, no exception is thrown and no action is performed.

Parameters:
  `listener` - the property change listener to be added
See Also:
  - `removePropertyChangeListener(PropertyChangeListener)`
  - `getPropertyChangeListeners()`
  - `addPropertyChangeListener(String, java.beans.PropertyChangeListener)`

### removePropertyChangeListener

public void removePropertyChangeListener(PropertyChangeListener listener)
Removes a PropertyChangeListener from the listener list. This method should be used to remove PropertyChangeListeners that were registered for all bound properties of this class.

If `listener` is `null`, no exception is thrown and no action is performed.

Parameters:
  `listener` - the PropertyChangeListener to be removed
See Also:
  - `addPropertyChangeListener(PropertyChangeListener)`
  - `getPropertyChangeListeners()`
  - `removePropertyChangeListener(String, PropertyChangeListener)`

### getPropertyChangeListeners

public PropertyChangeListener[] getPropertyChangeListeners()
Returns an array of all the property change listeners registered on this component.

Returns:
  all of this ui's `PropertyChangeListener`s or an empty array if no property change listeners are currently registered
See Also:
  - `addPropertyChangeListener(PropertyChangeListener)`
  - `removePropertyChangeListener(PropertyChangeListener)`
  - `getPropertyChangeListeners(String)`

### addPropertyChangeListener

public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
Adds a PropertyChangeListener to the listener list for a specific property.

If `propertyName` or `listener` is `null`, no exception is thrown and no action is taken.

Parameters:
  `propertyName` - one of the property names listed above
  `listener` - the property change listener to be added
See Also:
  - `removePropertyChangeListener(String, PropertyChangeListener)`
  - `getPropertyChangeListeners(String)`
  - `addPropertyChangeListener(String, PropertyChangeListener)`

### removePropertyChangeListener

public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
Removes a `PropertyChangeListener` from the listener list for a specific property. This method should be used to remove `PropertyChangeListener`s that were registered for a specific bound property.

If `propertyName` or `listener` is `null`, no exception is thrown and no action is taken.

Parameters:
  `propertyName` - a valid property name
  `listener` - the PropertyChangeListener to be removed
See Also:
  - `addPropertyChangeListener(String, PropertyChangeListener)`
  - `getPropertyChangeListeners(String)`
  - `removePropertyChangeListener(PropertyChangeListener)`

### getPropertyChangeListeners

public PropertyChangeListener[] getPropertyChangeListeners(String propertyName)
Returns an array of all the listeners which have been associated with the named property.

Parameters:
  `propertyName` - The name of the property being listened to
Returns:
  all of the `PropertyChangeListener`s associated with the named property; if no such listeners have been added or if `propertyName` is `null`, an empty array is returned
See Also:
  - `addPropertyChangeListener(String, PropertyChangeListener)`
  - `removePropertyChangeListener(String, PropertyChangeListener)`
  - `getPropertyChangeListeners()`

### firePropertyChange

protected void firePropertyChange(String propertyName, Object oldValue, Object newValue)
Support for reporting bound property changes for Object properties. This method can be called when a bound property has changed and it will send the appropriate PropertyChangeEvent to any registered PropertyChangeListeners.

Parameters:
  `propertyName` - the property whose value has changed
  `oldValue` - the property's previous value
  `newValue` - the property's new value

### applyPropertyChange

public void applyPropertyChange(PropertyChangeEvent evt, JLayer<? extends V> l)
Notifies the `LayerUI` when any of its property are changed and enables updating every `JLayer` this `LayerUI` instance is set to.

Parameters:
  `evt` - the PropertyChangeEvent generated by this `LayerUI`
  `l` - the `JLayer` this LayerUI is set to

### getBaseline

public int getBaseline(JComponent c, int width, int height)
If the `JLayer`'s view component is not `null`, this calls the view's `getBaseline()` method. Otherwise, the default implementation is called.

Overrides:
  `getBaseline` in class `ComponentUI`
Parameters:
  `c` - `JLayer` to return baseline resize behavior for
  `width` - the width to get the baseline for
  `height` - the height to get the baseline for
Returns:
  baseline or a value < 0 indicating there is no reasonable baseline
See Also:
  - `JComponent.getBaseline(int,int)`

### getBaselineResizeBehavior

public Component.BaselineResizeBehavior getBaselineResizeBehavior(JComponent c)
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getBaselineResizeBehavior()` method. Otherwise, the default implementation is called.

Overrides:
  `getBaselineResizeBehavior` in class `ComponentUI`
Parameters:
  `c` - `JLayer` to return baseline resize behavior for
Returns:
  an enum indicating how the baseline changes as the component size changes
See Also:
  - `JComponent.getBaseline(int, int)`

### doLayout

public void doLayout(JLayer<? extends V> l)
Causes the passed instance of `JLayer` to lay out its components.

Parameters:
  `l` - the `JLayer` component where this UI delegate is being installed

### getPreferredSize

public Dimension getPreferredSize(JComponent c)
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getPreferredSize()` method. Otherwise, the default implementation is used.

Overrides:
  `getPreferredSize` in class `ComponentUI`
Parameters:
  `c` - `JLayer` to return preferred size for
Returns:
  preferred size for the passed `JLayer`
See Also:
  - `JComponent.getPreferredSize()`
  - `LayoutManager.preferredLayoutSize(Container)`

### getMinimumSize

public Dimension getMinimumSize(JComponent c)
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getMinimalSize()` method. Otherwise, the default implementation is used.

Overrides:
  `getMinimumSize` in class `ComponentUI`
Parameters:
  `c` - `JLayer` to return preferred size for
Returns:
  minimal size for the passed `JLayer`
See Also:
  - `JComponent.getMinimumSize()`
  - `LayoutManager.minimumLayoutSize(Container)`
  - `ComponentUI.getPreferredSize(JComponent)`

### getMaximumSize

public Dimension getMaximumSize(JComponent c)
If the `JLayer`'s view component is not `null`, this returns the result of the view's `getMaximumSize()` method. Otherwise, the default implementation is used.

Overrides:
  `getMaximumSize` in class `ComponentUI`
Parameters:
  `c` - `JLayer` to return preferred size for
Returns:
  maximum size for the passed `JLayer`
See Also:
  - `JComponent.getMaximumSize()`
  - `LayoutManager2.maximumLayoutSize(Container)`

### paintImmediately

public void paintImmediately(int x, int y, int width, int height, JLayer<? extends V> l)
Paints the specified region in the `JLayer` this `LayerUI` is set to, immediately.

This method is to be overridden when the dirty region needs to be changed. The default implementation delegates its functionality to `JComponent.paintImmediately(int, int, int, int)`.

Parameters:
  `x` - the x value of the region to be painted
  `y` - the y value of the region to be painted
  `width` - the width of the region to be painted
  `height` - the height of the region to be painted
  `l` - a `JLayer` component
See Also:
  - `JComponent.paintImmediately(int, int, int, int)`

### imageUpdate

public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h, JLayer<? extends V> l)
Delegates its functionality to the default implementation of the `JLayer.imageUpdate` method which is inherited from `JLayer`'s base classes.

This method is to be overridden instead of `JLayer.imageUpdate`.

Note: This method is usually called not on the Event Dispatching Thread.

Parameters:
  `img` - the image being observed
  `infoflags` - see imageUpdate for information
  `x` - the x coordinate
  `y` - the y coordinate
  `w` - the width
  `h` - the height
  `l` - a `JLayer` component
Returns:
  false if the infoflags indicate that the image is completely loaded; true otherwise