V
- JLayer
のビュー・コンポーネントの型public final class JLayer<V extends Component> extends JComponent implements Scrollable, PropertyChangeListener, Accessible
JLayer
は、さまざまな高度なペイント効果を実装したり、そのボーダー内で生成されるすべてのAWTEvent
の通知を受信したりするために使用できる、Swingコンポーネントのための汎用のデコレータです。
JLayer
は、ペイント処理および入力イベントを、実際の装飾を実行するLayerUI
オブジェクトに委譲します。
LayerUI
に実装されているカスタム・ペイントおよびイベント通知は、JLayer自身とそのすべてのサブコンポーネントで機能します。この組み合わせによって、階層の一時ロック、複合コンポーネント用のデータ・ヒント、拡張されたマウス・スクロールなどの高度な新機能を追加して、既存のコンポーネントを強化できます。
複合コンポーネントにカスタム・ペイントを実行したり、そのサブコンポーネントから入力イベントをキャッチしたりするだけなら、JLayer
は良い解決策です。
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(JFrame.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(); } }); } }注:
JLayer
は次のメソッドをサポートしません。
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
がスローされます。JLayer
にコンポーネントを追加するには、setView(Component)
またはsetGlassPane(JPanel)
を使用します。JLayer(Component)
, setView(Component)
, getView()
, LayerUI
, JLayer(Component, LayerUI)
, setUI(javax.swing.plaf.LayerUI)
, getUI()
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
コンストラクタと説明 |
---|
JLayer()
|
JLayer(V view)
デフォルトの
LayerUI を使用して新しいJLayer オブジェクトを作成します。 |
JLayer(V view, LayerUI<V> ui)
指定されたビュー・コンポーネントと
LayerUI オブジェクトを使用して新しいJLayer オブジェクトを作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected void |
addImpl(Component comp, Object constraints, int index)
このメソッドは
JLayer ではサポートされていません。このメソッドは常にUnsupportedOperationException をスローします。 |
void |
addNotify()
このコンポーネントに現在親コンポーネントがあることを、このコンポーネントに通知します。
|
JPanel |
createGlassPane()
デフォルトの
glassPane を作成するために、コンストラクタ・メソッドから呼び出されます。 |
void |
doLayout()
LayerUI が設定されている場合、機能をLayerUI.doLayout(JLayer) メソッドに委譲します。 |
AccessibleContext |
getAccessibleContext()
この
JLayer に関連付けられたAccessibleContextを取得します。 |
JPanel |
getGlassPane()
JLayer のglassPaneコンポーネントまたはnull を返します。 |
long |
getLayerEventMask()
この
JLayer およびそのLayerUI によって受信するイベント・マスクのビットマップを返します。 |
Dimension |
getPreferredScrollableViewportSize()
ビュー・コンポーネントのビュー・ポートの適切なサイズを返します。
|
int |
getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
スクロール増分値を返します。スクロール増分値は、orientationの値によって、1ブロック分の行または列を完全に表示するために、論理行または論理列を表示するコンポーネントに必要です。
|
boolean |
getScrollableTracksViewportHeight()
レイヤーの適切な高さがビュー・ポートの高さより低い場合を除き、
false を返して、ビュー・ポートの高さがレイヤーの高さを決めないことを示します。 |
boolean |
getScrollableTracksViewportWidth()
レイヤーの適切な幅がビュー・ポートの幅より狭い場合を除き、
false を返して、ビュー・ポートの幅がレイヤーの幅を決めないことを示します。 |
int |
getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
スクロール増分値を返します。スクロール増分値は、orientationの値によって、新しい1行または1列を完全に表示するために、論理行または論理列を表示するコンポーネントに必要です。
|
LayerUI<? super V> |
getUI()
この
JLayer のLayerUI を返します。 |
V |
getView()
JLayer のビュー・コンポーネントまたはnull を返します。 |
boolean |
isOptimizedDrawingEnabled()
JLayer は(JComponent で)このメソッドのデフォルト実装をオーバーライドし、false を返します。 |
protected boolean |
isPaintingOrigin()
常に
true を返し、JLayer またはその上位オブジェクトのいずれかからペイントを実行します。 |
void |
paint(Graphics g)
すべてのペイントを
LayerUI オブジェクトに委譲します。 |
protected void |
paintComponent(Graphics g)
すべてのペイントは
paint(Graphics) およびComponentUI.update(Graphics, JComponent) メソッドによって実行されるため、このメソッドは空です。 |
void |
paintImmediately(int x, int y, int w, int h)
LayerUI が設定されている場合、機能をLayerUI.paintImmediately(int, int, int, int, JLayer) メソッドに委譲します。 |
void |
propertyChange(PropertyChangeEvent evt)
バウンド・プロパティの変更時に呼び出されます。
|
void |
remove(Component comp)
このコンテナから、指定されたコンポーネントを削除します。
|
void |
removeAll()
このコンテナからすべてのコンポーネントを削除します。
|
void |
removeNotify()
このコンポーネントに親コンポーネントがなくなったことを、このコンポーネントに通知します。
|
void |
setBorder(Border border)
null 以外のボーダー(または0以外のイン・セット)は、サポートされていません。これは、LayerUI クラスのサブクラス化を難しくするほどこのコンポーネントのジオメトリが複雑になるのを防ぐためです。 |
void |
setGlassPane(JPanel glassPane)
JLayer のglassPaneコンポーネントを設定します。null も指定できます。 |
void |
setLayerEventMask(long layerEventMask)
指定されたイベント・マスク・パラメータによって定義されたJLayerとそのすべての下位オブジェクトからのイベントを、
LayerUI.eventDispatched(AWTEvent, JLayer) メソッドに送信できるようにします。 |
void |
setLayout(LayoutManager mgr)
このコンテナのレイアウト・マネージャを設定します。
|
void |
setUI(LayerUI<? super V> ui)
ペイントを実行して、この
JLayer の入力イベントを受信するLayerUI を設定します。 |
void |
setView(V view)
JLayer のビュー・コンポーネントを設定します。null も指定できます。 |
void |
updateUI()
LayerUI が設定されている場合、機能をLayerUI.updateUI(JLayer) メソッドに委譲します。 |
addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, 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, 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, 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, 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, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, 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, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
public JLayer()
public JLayer(V view)
LayerUI
を使用して新しいJLayer
オブジェクトを作成します。view
- このJLayer
によって装飾されるコンポーネントsetUI(javax.swing.plaf.LayerUI<? super V>)
public V getView()
JLayer
のビュー・コンポーネントまたはnull
を返します。JLayer
のビュー・コンポーネント。存在しない場合はnull
setView(Component)
public void setView(V view)
JLayer
のビュー・コンポーネントを設定します。null
も指定できます。view
- このJLayer
のビュー・コンポーネントgetView()
public void setUI(LayerUI<? super V> ui)
JLayer
の入力イベントを受信するLayerUI
を設定します。ui
- このJLayer
のLayerUI
public JPanel getGlassPane()
JLayer
のglassPaneコンポーネントまたはnull
を返します。JLayer
のglassPaneコンポーネント。存在しない場合はnull
setGlassPane(JPanel)
public void setGlassPane(JPanel glassPane)
JLayer
のglassPaneコンポーネントを設定します。null
も指定できます。glassPane
- このJLayer
のglassPaneコンポーネントgetGlassPane()
public JPanel createGlassPane()
glassPane
を作成するために、コンストラクタ・メソッドから呼び出されます。デフォルトでは、このメソッドは可視性をtrueに、不透明性をfalseに設定して新しいJPanelを作成します。glassPane
public void setLayout(LayoutManager mgr)
注: mgr
がnull
以外の場合、レイアウト・マネージャがJLayer
ではサポートされていないためこのメソッドは例外をスローします。
setLayout
、クラス: Container
mgr
- 指定されたレイアウト・マネージャIllegalArgumentException
- このメソッドがサポートされていない場合Container.doLayout()
, Container.getLayout()
, Container.invalidate()
public void setBorder(Border border)
null
以外のボーダー(または0以外のイン・セット)は、サポートされていません。これは、LayerUI
クラスのサブクラス化を難しくするほどこのコンポーネントのジオメトリが複雑になるのを防ぐためです。ボーダー付きのJLayer
を生成するには、ボーダーを持つJPanel
にそれを追加します。
注: border
がnull
以外の場合、ボーダーがJLayer
ではサポートされていないためこのメソッドは例外をスローします。
setBorder
、クラス: JComponent
border
- 設定するBorder
IllegalArgumentException
- このメソッドがサポートされていない場合Border
, CompoundBorder
protected void addImpl(Component comp, Object constraints, int index)
JLayer
ではサポートされていません。このメソッドは常にUnsupportedOperationException
をスローします。addImpl
、クラス: Container
comp
- 追加されるコンポーネントconstraints
- このコンポーネントのレイアウト制約を表現するオブジェクトindex
- コンポーネントを挿入するコンテナのリスト内での位置。-1
は最後に挿入することを意味するUnsupportedOperationException
- このメソッドがサポートされていない場合setView(Component)
, setGlassPane(JPanel)
public void remove(Component comp)
removeLayoutComponent
メソッドを使用してこのコンテナのレイアウトからコンポーネントを削除するために、レイアウト・マネージャにも通知します。
このメソッドではレイアウトに関連する情報が変更されるため、コンポーネント階層が無効になります。コンテナがすでに表示されている場合は、変更を反映するために、あとで階層を検証する必要があります。
remove
、クラス: Container
comp
- 削除されるコンポーネントContainer.add(java.awt.Component)
, Container.invalidate()
, Container.validate()
, Container.remove(int)
public void removeAll()
removeLayoutComponent
メソッドを使用してこのコンテナのレイアウトからコンポーネントを削除するために、レイアウト・マネージャにも通知します。
このメソッドではレイアウトに関連する情報が変更されるため、コンポーネント階層が無効になります。コンテナがすでに表示されている場合は、変更を反映するために、あとで階層を検証する必要があります。
removeAll
、クラス: Container
Container.add(java.awt.Component)
, Container.remove(int)
, Container.invalidate()
protected boolean isPaintingOrigin()
true
を返し、JLayer
またはその上位オブジェクトのいずれかからペイントを実行します。isPaintingOrigin
、クラス: JComponent
JComponent.isPaintingOrigin()
public void paintImmediately(int x, int y, int w, int h)
LayerUI
が設定されている場合、機能をLayerUI.paintImmediately(int, int, int, int, JLayer)
メソッドに委譲します。paintImmediately
、クラス: JComponent
x
- ペイント領域のx座標y
- ペイント領域のy座標w
- ペイント領域の幅h
- ペイント領域の高さJComponent.repaint(long, int, int, int, int)
, JComponent.isPaintingOrigin()
protected void paintComponent(Graphics g)
paint(Graphics)
およびComponentUI.update(Graphics, JComponent)
メソッドによって実行されるため、このメソッドは空です。paintComponent
、クラス: JComponent
g
- 保護対象のGraphics
オブジェクトJComponent.paint(java.awt.Graphics)
, ComponentUI
public boolean isOptimizedDrawingEnabled()
JLayer
は(JComponent
で)このメソッドのデフォルト実装をオーバーライドし、false
を返します。その結果、描画機構はJLayer
の子に直接メッセージを送るのではなく、JLayer
のpaint
の実装を呼び出します。isOptimizedDrawingEnabled
、クラス: JComponent
public void propertyChange(PropertyChangeEvent evt)
propertyChange
、インタフェース: PropertyChangeListener
evt
- イベント・ソースと変更されたプロパティを記述したPropertyChangeEventオブジェクト。public void setLayerEventMask(long layerEventMask)
LayerUI.eventDispatched(AWTEvent, JLayer)
メソッドに送信できるようにします。
イベントは、このJLayer
にLayerUI
が設定されていて、JLayer
が表示可能な場合に配信されます。
次の例では、LayerUI
の実装でこのメソッドを正しく使用する方法を示しています。
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); }デフォルトでは
JLayer
はイベントを受け取らず、そのイベント・マスクは0
です。layerEventMask
- 受け取るイベント型のビット・マスクgetLayerEventMask()
, LayerUI.eventDispatched(AWTEvent, JLayer)
, Component.isDisplayable()
public long getLayerEventMask()
JLayer
およびそのLayerUI
によって受信するイベント・マスクのビットマップを返します。
つまり、LayerUI.eventDispatched(AWTEvent, JLayer)
メソッドはイベント・マスクに一致するイベントのみを受け取ります。
デフォルトではJLayer
はイベントを受け取りません。
JLayer
用に受け取るイベント型のビット・マスクpublic void updateUI()
LayerUI
が設定されている場合、機能をLayerUI.updateUI(JLayer)
メソッドに委譲します。public Dimension getPreferredScrollableViewportSize()
このレイヤーのビュー・コンポーネントがScrollable
を実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。
getPreferredScrollableViewportSize
、インタフェース: Scrollable
Scrollable
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
このレイヤーのビュー・コンポーネントがScrollable
を実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。
getScrollableBlockIncrement
、インタフェース: Scrollable
visibleRect
- ビュー・ポート内の可視のビュー領域orientation
- SwingConstants.VERTICALまたはSwingConstants.HORIZONTAL。direction
- 上または左にスクロールする場合は0より小さく、下または右にスクロールする場合は0より大きい。Scrollable
public boolean getScrollableTracksViewportHeight()
false
を返して、ビュー・ポートの高さがレイヤーの高さを決めないことを示します。
このレイヤーのビュー・コンポーネントがScrollable
を実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。
getScrollableTracksViewportHeight
、インタフェース: Scrollable
Scrollable
public boolean getScrollableTracksViewportWidth()
false
を返して、ビュー・ポートの幅がレイヤーの幅を決めないことを示します。
このレイヤーのビュー・コンポーネントがScrollable
を実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。
getScrollableTracksViewportWidth
、インタフェース: Scrollable
Scrollable
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
JScrollPane
などのスクロール・コンテナは、ユーザーがユニット・スクロールを要求すると、このメソッドを使用します。
このレイヤーのビュー・コンポーネントがScrollable
を実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。
getScrollableUnitIncrement
、インタフェース: Scrollable
visibleRect
- ビュー・ポート内の可視のビュー領域orientation
- SwingConstants.VERTICALまたはSwingConstants.HORIZONTAL。direction
- 上または左にスクロールする場合は0より小さく、下または右にスクロールする場合は0より大きい。Scrollable
public void addNotify()
KeyboardAction
イベント・リスナーで設定されます。このメソッドは、ツールキットによって内部で呼び出され、プログラムから直接呼び出されることはありません。public void removeNotify()
KeyboardAction
が削除されます。このメソッドは、ツールキットによって内部で呼び出され、プログラムから直接呼び出されることはありません。public void doLayout()
LayerUI
が設定されている場合、機能をLayerUI.doLayout(JLayer)
メソッドに委譲します。public AccessibleContext getAccessibleContext()
JLayer
に関連付けられたAccessibleContextを取得します。getAccessibleContext
、インタフェース: Accessible
getAccessibleContext
、クラス: Component
JLayer
に関連付けられたAccessibleContext。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.