public class JTextField extends JTextComponent implements SwingConstants
JTextFieldは、1行のテキストの編集を可能にする軽量コンポーネントです。テキスト・フィールドの詳細と使用例については、『The Java Tutorial』の「How to Use Text Fields」を参照してください。
JTextFieldは、この処理を適切に行うjava.awt.TextFieldクラスとのソース互換性を提供するために用意されています。このコンポーネントは、java.awt.TextFieldクラスにはない機能を備えています。追加機能については、スーパー・クラスを参照してください。
JTextFieldには、発生するアクション・イベントのコマンド文字列として使用する文字列を確定するメソッドがあります。java.awt.TextFieldでは、フィールドのテキストがActionEventのコマンド文字列として使用されました。JTextFieldでは、setActionCommandメソッドで設定されたコマンド文字列がnullでない場合は、それが使用されます。それ以外の場合は、フィールドのテキストがjava.awt.TextFieldとの互換機能として使用されます。
プラグイン可能なLook & Feelの新しい実装がパスワード文字列を偶発的に表示してしまわないようにするために、setEchoCharメソッドとgetEchoCharメソッドは直接は提供されません。パスワード様式のサービスを提供するためには、これとは別のJPasswordFieldクラスがJTextFieldを拡張して導入され、独自にプラグイン可能なLook & Feelにこのサービスを提供します。
java.awt.TextFieldの変更を監視するには、TextEventのTextListenerを追加します。JTextComponentベースのコンポーネントでは、DocumentEvent経由でモデルからDocumentListenersに変更が送られます。DocumentEventは、必要に応じて、変更位置と変更の種類を提供します。この部分のコードは次のようになります。
DocumentListener myListener = ??;
JTextField myArea = ??;
myArea.getDocument().addDocumentListener(myListener);
JTextFieldの水平配置は、左揃え、中央揃え、右揃え、または末尾調整に設定できます。フィールド・テキストの必要なサイズがそのフィールドに割り当てられたサイズよりも小さい場合は、右揃えと末尾調整は便利です。これはsetHorizontalAlignmentメソッドとgetHorizontalAlignmentメソッドによって指定されます。デフォルトでは、左揃えになります。
テキスト・フィールドがVK_ENTERイベントを消費する方法は、このテキスト・フィールドにアクション・リスナーがあるかどうかによって異なります。アクション・リスナーがある場合は、VK_ENTERによりリスナーにActionEventが返され、VK_ENTERイベントが消費されます。これは、AWTテキスト・フィールドがVK_ENTERイベントを処理する方法と互換性があります。テキスト・フィールドにアクション・リスナーがない場合、v 1.3では、VK_ENTERイベントは消費されません。代わりに、上位クラスのコンポーネントのバインディングが処理されて、JFC/Swingのデフォルト・ボタン機能が使用できます。
カスタマイズされたフィールドを簡単に作成するには、モデルを拡張して、提供されるデフォルト・モデルを変更します。たとえば次のコードの一部は、大文字だけを保持するフィールドを作成します。これは、テキストがクリップボードからペーストされたり、プログラムに基づいて変更されても機能します。
public class UpperCaseField extends JTextField {
public UpperCaseField(int cols) {
super(cols);
}
protected Document createDefaultModel() {
return new UpperCaseDocument();
}
static class UpperCaseDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
}
}
}
警告: Swingはスレッドに対して安全ではありません。詳細は、「Swing's Threading Policy」を参照してください。
警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。1.4以降、すべてのJavaBeans(tm)用の長期間の格納サポートがjava.beansパッケージに追加されています。XMLEncoderを参照してください。
| 修飾子と型 | クラスと説明 |
|---|---|
protected class |
JTextField.AccessibleJTextField
このクラスは
JTextFieldクラスのアクセシビリティ・サポートを実装しています。 |
JTextComponent.AccessibleJTextComponent, JTextComponent.DropLocation, JTextComponent.KeyBindingJComponent.AccessibleJComponentContainer.AccessibleAWTContainerComponent.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy| 修飾子と型 | フィールドと説明 |
|---|---|
static String |
notifyAction
フィールドの内容が受け付けられたという通知を送るアクションの名前です。
|
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEYlistenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWaccessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTBOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WESTABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH| コンストラクタと説明 |
|---|
JTextField()
新しい
TextFieldを構築します。 |
JTextField(Document doc, String text, int columns)
指定されたテキスト・ストレージ・モデルと列数を使用する新規の
JTextFieldを構築します。 |
JTextField(int columns)
指定された列数で新規の空の
TextFieldを構築します。 |
JTextField(String text)
指定されたテキストで初期化された新しい
TextFieldを構築します。 |
JTextField(String text, int columns)
指定されたテキストおよび列で初期化される新規
TextFieldを構築します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected void |
actionPropertyChanged(Action action, String propertyName)
関連アクションのプロパティの変更に応じてテキスト・フィールドの状態を更新します。
|
void |
addActionListener(ActionListener l)
アクション・イベントをこのテキスト・フィールドから受け取るために、指定されたアクション・リスナーを追加します。
|
protected void |
configurePropertiesFromAction(Action a)
指定された
Actionのプロパティに一致するように、このテキスト・フィールドにプロパティを設定します。 |
protected PropertyChangeListener |
createActionPropertyChangeListener(Action a)
指定された
Actionからの変更を待機し、適切なプロパティを更新する役割を担うPropertyChangeListenerを作成して、返します。 |
protected Document |
createDefaultModel()
モデルが明示的に指定されない場合は、構築時に使うモデルのデフォルト実装を作成します。
|
protected void |
fireActionPerformed()
このイベント・タイプの通知対象として登録されているすべてのリスナーに通知します。
|
AccessibleContext |
getAccessibleContext()
この
JTextFieldに関連付けられているAccessibleContextを取得します。 |
Action |
getAction()
この
ActionEventソースに現在設定されているActionを返します。Actionが設定されていない場合は、nullを返します。 |
ActionListener[] |
getActionListeners()
addActionListener()を使用してこのJTextFieldに追加されたすべての
ActionListenerの配列を返します。 |
Action[] |
getActions()
エディタのコマンド・リストを取得します。
|
int |
getColumns()
この
TextFieldの列数を返します。 |
protected int |
getColumnWidth()
列幅を取得します。
|
int |
getHorizontalAlignment()
テキストの水平配置を返します。
|
BoundedRangeModel |
getHorizontalVisibility()
テキスト・フィールドの可視性を返します。
|
Dimension |
getPreferredSize()
この
TextFieldに必要とされる適切なサイズDimensionsを返します。 |
int |
getScrollOffset()
ピクセル単位のスクロール・オフセットを取得します。
|
String |
getUIClassID()
UIのクラスIDを取得します。
|
boolean |
isValidateRoot()
テキスト・フィールド自身の中から呼び出される
revalidateは、テキスト・フィールドの妥当性を検証することによって処理されます。ただし、テキスト・フィールドがJViewport内に含まれていない場合はfalseを返します。 |
protected String |
paramString()
この
JTextFieldの文字列表現を返します。 |
void |
postActionEvent()
このテキスト・フィールドで発生するアクション・イベントを、登録されているすべての
ActionListenerオブジェクトにディスパッチすることによって処理します。 |
void |
removeActionListener(ActionListener l)
以後このテキスト・フィールドからアクション・イベントを受け取らないように、指定されたアクション・リスナーを削除します。
|
void |
scrollRectToVisible(Rectangle r)
フィールドを左または右にスクロールします。
|
void |
setAction(Action a)
この
ActionEventソースのActionを設定します。 |
void |
setActionCommand(String command)
アクション・イベントに使うコマンド文字列を設定します。
|
void |
setColumns(int columns)
この
TextFieldの列数を設定し、配置を無効にします。 |
void |
setDocument(Document doc)
エディタをテキスト・ドキュメントに関連付けます。
|
void |
setFont(Font f)
現在のフォントを設定します。
|
void |
setHorizontalAlignment(int alignment)
テキストの水平配置を設定します。
|
void |
setScrollOffset(int scrollOffset)
ピクセル単位のスクロール・オフセットを設定します。
|
addCaretListener, addInputMethodListener, addKeymap, copy, cut, fireCaretUpdate, getCaret, getCaretColor, getCaretListeners, getCaretPosition, getDisabledTextColor, getDocument, getDragEnabled, getDropLocation, getDropMode, getFocusAccelerator, getHighlighter, getInputMethodRequests, getKeymap, getKeymap, getMargin, getNavigationFilter, getPreferredScrollableViewportSize, getPrintable, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedText, getSelectedTextColor, getSelectionColor, getSelectionEnd, getSelectionStart, getText, getText, getToolTipText, getUI, isEditable, loadKeymap, modelToView, moveCaretPosition, paste, print, print, print, processInputMethodEvent, read, removeCaretListener, removeKeymap, removeNotify, replaceSelection, restoreComposedText, saveComposedText, select, selectAll, setCaret, setCaretColor, setCaretPosition, setComponentOrientation, setDisabledTextColor, setDragEnabled, setDropMode, setEditable, setFocusAccelerator, setHighlighter, setKeymap, setMargin, setNavigationFilter, setSelectedTextColor, setSelectionColor, setSelectionEnd, setSelectionStart, setText, setUI, updateUI, viewToModel, writeaddAncestorListener, addNotify, 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, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, 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, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, updateadd, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, 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, setLayout, transferFocusDownCycle, validate, validateTreeaction, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, 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, 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, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCyclepublic JTextField()
TextFieldを構築します。デフォルト・モデルが作成され、初期文字列はnullで、列数が0に設定されます。public JTextField(String text)
TextFieldを構築します。デフォルト・モデルが作成され、列数は0です。text - 表示されるテキストまたはnullpublic JTextField(int columns)
TextFieldを構築します。デフォルト・モデルが作成され、初期文字列はnullに設定されます。columns - 適切な幅の計算に使用する列数。列数を0に設定すると、適切な幅はコンポーネントの実装から自然に得られる値になるpublic JTextField(String text, int columns)
TextFieldを構築します。デフォルト・モデルが作成されます。text - 表示されるテキストまたはnullcolumns - 適切な幅の計算に使用する列数。列数を0に設定すると、適切な幅はコンポーネントの実装から自然に得られる値になるpublic JTextField(Document doc, String text, int columns)
JTextFieldを構築します。これは、ほかのコンストラクタが入力するコンストラクタです。ドキュメントがnullの場合はデフォルト・モデルが作成されます。doc - 使用するテキスト・ストレージ。nullの場合は、createDefaultModelメソッドを呼び出すことによってデフォルトの値が提供されるtext - 表示する初期文字列またはnullcolumns - 適切な幅の計算に使用する列数。0以上。columnsを0に設定すると、適切な幅はコンポーネントの実装から自然に得られる値になるIllegalArgumentException - columnsが0未満の場合public String getUIClassID()
getUIClassID 、クラス: JComponentJComponent.getUIClassID(), UIDefaults.getUI(javax.swing.JComponent)public void setDocument(Document doc)
setDocument 、クラス: JTextComponentdoc - 表示および編集するドキュメントJTextComponent.getDocument()public boolean isValidateRoot()
revalidateは、テキスト・フィールドの妥当性を検証することによって処理されます。ただし、テキスト・フィールドがJViewport内に含まれていない場合はfalseを返します。isValidateRoot 、クラス: JComponentJViewPortの場合はfalse、そうでない場合はtrueJComponent.revalidate(), JComponent.isValidateRoot(), Container.isValidateRoot()public int getHorizontalAlignment()
JTextField.LEFT
JTextField.CENTER
JTextField.RIGHT
JTextField.LEADING
JTextField.TRAILING
public void setHorizontalAlignment(int alignment)
JTextField.LEFT
JTextField.CENTER
JTextField.RIGHT
JTextField.LEADING
JTextField.TRAILING
invalidateとrepaintが呼び出され、PropertyChangeイベント(horizontalAlignment)がトリガーされます。alignment - 配置方法IllegalArgumentException - alignmentが有効なキーでない場合protected Document createDefaultModel()
PlainDocumentのインスタンスが返されます。public int getColumns()
TextFieldの列数を返します。public void setColumns(int columns)
TextFieldの列数を設定し、配置を無効にします。columns - 列数>= 0IllegalArgumentException - columnsが0より小さい場合protected int getColumnWidth()
public Dimension getPreferredSize()
TextFieldに必要とされる適切なサイズDimensionsを返します。ゼロ以外の列数が設定されていると、その幅は列数を列幅でかけた値に設定されます。getPreferredSize 、クラス: JComponentJComponent.setPreferredSize(java.awt.Dimension), ComponentUIpublic void setFont(Font f)
revalidateは、フォントの設定後に呼び出されます。setFont 、クラス: JComponentf - 新規フォントComponent.getFont()public void addActionListener(ActionListener l)
l - 追加されるアクション・リスナーpublic void removeActionListener(ActionListener l)
l - 削除されるアクション・リスナーpublic ActionListener[] getActionListeners()
ActionListenerの配列を返します。ActionListener。リスナーが追加されていない場合は空の配列protected void fireActionPerformed()
EventListenerListpublic void setActionCommand(String command)
command - コマンド文字列public void setAction(Action a)
ActionEventソースのActionを設定します。新しいActionは設定済みのActionと置き換わりますが、ActionListenersで独立して追加されたaddActionListenerには影響しません。ActionがすでにActionEventソースにすでに登録されているActionListenerである場合は、再登録されません。
Actionを設定すると、「ActionをサポートするSwingコンポーネント」で説明されているすべてのプロパティがすぐに変更されます。続いて、Actionのプロパティの変更に合わせて、テキスト・フィールドのプロパティが自動的に更新されます。
このメソッドは、Actionのプロパティ値を設定し、追跡するために、ほかの3つのメソッドを使用します。このメソッドは、テキスト・フィールドのプロパティをただちに変更するために、configurePropertiesFromActionメソッドを使用します。Actionのプロパティ値の変更を追跡するために、このメソッドはcreateActionPropertyChangeListenerから返されるPropertyChangeListenerを登録します。デフォルトのPropertyChangeListenerは、Actionのプロパティに変更があると、actionPropertyChangedメソッドを呼び出します。
a - JTextFieldのAction、またはnullAction, getAction(), configurePropertiesFromAction(javax.swing.Action), createActionPropertyChangeListener(javax.swing.Action), actionPropertyChanged(javax.swing.Action, java.lang.String)public Action getAction()
ActionEventソースに現在設定されているActionを返します。Actionが設定されていない場合は、nullを返します。ActionEventソースのAction、またはnullAction, setAction(javax.swing.Action)protected void configurePropertiesFromAction(Action a)
Actionのプロパティに一致するように、このテキスト・フィールドにプロパティを設定します。これによって設定されるプロパティの詳細は、「ActionをサポートするSwingコンポーネント」を参照してください。a - プロパティを取得するAction、またはnullAction, setAction(javax.swing.Action)protected void actionPropertyChanged(Action action, String propertyName)
createActionPropertyChangeListenerから返されるPropertyChangeListenerから呼び出されます。サブクラスは、通常、これを呼び出す必要はありません。追加のActionプロパティをサポートするサブクラスは、これとconfigurePropertiesFromActionをオーバーライドする必要があります。
このメソッドによって設定されるプロパティのリストは、「ActionをサポートするSwingコンポーネント」の表を参照してください。
action - このテキスト・フィールドに関連付けられたActionpropertyName - 変更されたプロパティの名前Action, configurePropertiesFromAction(javax.swing.Action)protected PropertyChangeListener createActionPropertyChangeListener(Action a)
Actionからの変更を待機し、適切なプロパティを更新する役割を担うPropertyChangeListenerを作成して、返します。
警告: これをサブクラス化する場合、匿名の内部クラスは作成しないでください。作成すると、テキスト・フィールドの寿命がActionの寿命に拘束されます。
a - テキスト・フィールドのアクションAction, setAction(javax.swing.Action)public Action[] getActions()
getActions 、クラス: JTextComponentpublic void postActionEvent()
ActionListenerオブジェクトにディスパッチすることによって処理します。これは一般的に、テキスト・フィールドに登録されたコントローラによって呼び出されます。public BoundedRangeModel getHorizontalVisibility()
フィールドのLook & Feelの実装は、BoundedRangeModelの最小値、最大値、長さの各プロパティの値を管理します。
BoundedRangeModelpublic int getScrollOffset()
public void setScrollOffset(int scrollOffset)
scrollOffset - オフセット>= 0public void scrollRectToVisible(Rectangle r)
scrollRectToVisible 、クラス: JComponentr - スクロール対象の範囲JViewportprotected String paramString()
JTextFieldの文字列表現を返します。このメソッドはデバッグ専用であり、返される文字列の内容および形式は実装によって異なります。返される文字列は空の場合がありますが、nullにはなりません。paramString 、クラス: JTextComponentJTextFieldの文字列表現public AccessibleContext getAccessibleContext()
JTextFieldに関連付けられているAccessibleContextを取得します。JTextFieldsの場合、AccessibleContextはAccessibleJTextFieldの形式を取ります。必要に応じて、新しいAccessibleJTextFieldインスタンスが作成されます。getAccessibleContext 、インタフェース: AccessiblegetAccessibleContext 、クラス: JTextComponentJTextFieldのAccessibleContextとして機能するAccessibleJTextField バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.