モジュール java.desktop
パッケージ javax.swing.text

クラスAsyncBoxView

java.lang.Object
javax.swing.text.View
javax.swing.text.AsyncBoxView
すべての実装されたインタフェース:
SwingConstants

public class AsyncBoxView
extends View
非同期にレイアウトを行うボックスです。 GUIイベント・スレッドにレイアウトを行わないでGUIイベント・スレッドを移動させ続けるのに役立ちます。 レイアウトは子ビューの操作で詳細に行われます。 各子ビューがレイアウトの一部にアクセスされたあと(操作に時間がかかる場合がある)、残りのタスクを放棄することも、新しい優先度の高いタスク(つまり同期の要求または可視領域にサービスすること)を行うこともできます。

子ビューにアクセスしている間に、関連するドキュメントで読取りロックが取得され、アクセス中モデルを安定させます。

導入されたバージョン:
1.3
  • フィールド詳細

    • locator

      protected AsyncBoxView.ChildLocator locator
      子のオフセットを管理するオブジェクトです。 子の位置の管理のためのロックはすべて、このオブジェクトで行われます。
  • コンストラクタの詳細

    • AsyncBoxView

      public AsyncBoxView​(Element elem, int axis)
      非同期レイアウトを行うボックス・ビューを構築します。
      パラメータ:
      elem - 表すモデルの要素
      axis - タイリングの基準にする軸。 X_AXISまたはY_AXISのどちらか
  • メソッドの詳細

    • getMajorAxis

      public int getMajorAxis()
      主軸(子のタイリングの基準にする軸)を取得します。 X_AXISまたはY_AXISのどちらかの値を持ちます。
      戻り値:
      長軸
    • getMinorAxis

      public int getMinorAxis()
      副軸(タイリングされた軸に直角の軸)を取得します。 X_AXISまたはY_AXISのどちらかの値を持ちます。
      戻り値:
      短軸
    • getTopInset

      public float getTopInset()
      ビュー周囲の上部マージンを取得します。
      戻り値:
      ビュー周りのマージンの上部
    • setTopInset

      public void setTopInset​(float i)
      ビュー周囲の上部マージンを設定します。
      パラメータ:
      i - インセットの値
    • getBottomInset

      public float getBottomInset()
      ビュー周囲の下部マージンを取得します。
      戻り値:
      ビュー周りのマージンの下部
    • setBottomInset

      public void setBottomInset​(float i)
      ビュー周囲の下部マージンを設定します。
      パラメータ:
      i - インセットの値
    • getLeftInset

      public float getLeftInset()
      ビュー周囲の左部マージンを取得します。
      戻り値:
      ビュー周りの余白の左部分
    • setLeftInset

      public void setLeftInset​(float i)
      ビュー周囲の左部マージンを設定します。
      パラメータ:
      i - インセットの値
    • getRightInset

      public float getRightInset()
      ビュー周囲の右部マージンを取得します。
      戻り値:
      ビュー周りのマージンの右部分
    • setRightInset

      public void setRightInset​(float i)
      ビュー周囲の右部マージンを設定します。
      パラメータ:
      i - インセットの値
    • getInsetSpan

      protected float getInsetSpan​(int axis)
      インセットで取り上げられた軸に沿ったスパンを取得します。
      パラメータ:
      axis - 合計インセットを決定する軸。X_AXISまたはY_AXISのどちらか。
      戻り値:
      インセットによって占められる軸に沿ったスパン
      導入されたバージョン:
      1.4
    • setEstimatedMajorSpan

      protected void setEstimatedMajorSpan​(boolean isEstimated)
      主なスパンを評価中として処理するかどうかを決定する、estimatedMajorSpanプロパティを設定します。 このプロパティがtrueの場合、主軸に沿ったsetSizeの値により主軸に沿った要件が変更され、増分の変更は子がすべて更新されるまで無視されます(この更新により、プロパティが自動的にfalseに設定されます)。 プロパティがfalseの場合、majorSpanの値が正確であるとみなされ、計算時に増分の変更が合計に加えられます。
      パラメータ:
      isEstimated - estimatedMajorSpanプロパティの新しい値
      導入されたバージョン:
      1.4
    • getEstimatedMajorSpan

      protected boolean getEstimatedMajorSpan()
      現在、主なスパンが評価されているかどうかを示します。
      戻り値:
      現在推定されている主要スパンかどうか
      導入されたバージョン:
      1.4
    • getChildState

      protected AsyncBoxView.ChildState getChildState​(int index)
      指定されたインデックスの子のレイアウト状態を表すオブジェクトを取得します。
      パラメータ:
      index - 子のインデックス。 0以上でgetViewCount()より小さい値であること。
      戻り値:
      指定されたインデックスにある子のレイアウト状態を表すオブジェクト
    • getLayoutQueue

      protected LayoutQueue getLayoutQueue()
      レイアウトに使用するキューを取得します。
      戻り値:
      レイアウトに使用するキュー
    • createChildState

      protected AsyncBoxView.ChildState createChildState​(View v)
      サブクラスがChildStateレコードを拡張してより多くのことを行なったり保持したりできるように、新しいChildStateレコードがこのメソッドによって作成されます。
      パラメータ:
      v - ビュー
      戻り値:
      新しい子の状態
    • majorRequirementChange

      protected void majorRequirementChange​(AsyncBoxView.ChildState cs, float delta)
      主軸に沿って変更された要件です。 指定されたChildStateオブジェクトのレイアウトを行うスレッドが、子ビューの新しい設定を取得し終えたときに呼び出します。 呼び出すのは通常レイアウト・スレッドですが、モデルとビューの変換の実行など、イベント・スレッドが何かをすぐに更新しようとしている場合は、イベント・スレッドのこともあります。

      この実装では、親ビューに通知する必要のある要件で主軸を考慮するかどうかを将来確認するために、主軸を変更済みとしてマークします。 主軸とともにスパンが評価されない場合、指定されたデルタで更新されて、増分の変更が反映されます。 主なスパンが評価される場合、デルタは無視されます。

      パラメータ:
      cs - 子状態
      delta - デルタ
    • minorRequirementChange

      protected void minorRequirementChange​(AsyncBoxView.ChildState cs)
      副軸に沿って変更された要件です。 指定されたChildStateオブジェクトのレイアウトを行うスレッドが、子ビューの新しい設定を取得し終えたときに呼び出します。 呼び出すのは通常レイアウト・スレッドですが、モデルとビューの変換の実行など、GUIスレッドが何かをすぐに更新しようとしている場合は、GUIスレッドが呼び出します。
      パラメータ:
      cs - 子状態
    • flushRequirementChanges

      protected void flushRequirementChanges()
      設定の変更を上方の親ビューへ通知します。 通常は、レイアウト・スレッドによって呼び出されます。
    • replace

      public void replace​(int offset, int length, View[] views)
      子ビューを更新するためにスーパー・クラスを呼び出し、子のステータス・レコードを更新します。 このオブジェクトは、レイアウト・スレッドとの相互作用が発生しないように、書込みロックがモデルで保持されている間に呼び出されることになっています(つまり、レイアウト・スレッドは処理開始前に読取りロックを取得する)。
      オーバーライド:
      replace、クラス: View
      パラメータ:
      offset - 子ビューへの開始オフセット>= 0
      length - 置き換える既存のビューの数>= 0
      views - 挿入する子ビュー
    • loadChildren

      protected void loadChildren​(ViewFactory f)
      ビューを初期化するためにすべての子をロードします。 これは、setParentメソッドによって呼び出されます。 サブクラスは、このメソッドを再実装して別の方法で子ビューを初期化できます。 デフォルトの実装は、子要素ごとに子ビューを作成します。

      通常書込みロックは子が変更される間Documentで保持され、描画スレッドとレイアウト・スレッドを安全に保ちます。 これに対する例外は、既存の要素を表すようこのメソッドによってビューが初期化されるときで、初期化中はpreferenceChangedを除外するよう同期化されます。

      パラメータ:
      f - ビュー・ファクトリ
      関連項目:
      setParent(javax.swing.text.View)
    • getViewIndexAtPosition

      protected int getViewIndexAtPosition​(int pos, Position.Bias b)
      モデル内の指定された位置を表す子ビューのインデックスを取得します。 このメソッドは、それぞれの子要素に対して子ビューがある場合に、ビューを取り出すために実装されています。
      パラメータ:
      pos - 位置>= 0
      b - 位置バイアス
      戻り値:
      指定された位置を表すビューのインデックス。その位置を表すビューがない場合は -1
    • updateLayout

      protected void updateLayout​(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
      モデルから変更の通知を受け取った場合に、レイアウトを更新します。 子のオフセットが正しく計算されるように、ChildLocatorの変更を通知するために実装されます。
      オーバーライド:
      updateLayout、クラス: View
      パラメータ:
      ec - このビューが扱う要素への変更。変更がなかった場合、nullになる可能性がある。
      e - 関連するドキュメントからの変更情報
      a - ビューの現在の割当て
      関連項目:
      View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory), View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory), View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
    • setParent

      public void setParent​(View parent)
      ビューの親を設定します。 このビューがまだ子を持たない場合は、loadChildrenメソッドの呼出しとともにスーパークラスの動作を提供するために実装し直されます。 子をコンストラクタの中にロードしないようにしてください。これは、親を設定する動作が原因となって、たとえば収容側Containerを取得するために、子が階層をさかのぼって検索しようとする可能性があるからです。 このビューが子を持つ場合、ビューはビュー階層内のある位置から別の位置へ移動しているので、loadChildrenメソッドは呼び出されません。
      オーバーライド:
      setParent、クラス: View
      パラメータ:
      parent - ビューの親。ない場合はnull
    • preferenceChanged

      public void preferenceChanged​(View child, boolean width, boolean height)
      子ビューは親でこのメソッドを呼び出し、設定が変更されたこと、および再度レイアウトが考慮されなければならないことを示すことができます。 このメソッドはレイアウト・スレッドで新しい作業に待機するために実装し直されます。 このメソッドは子を通じて複数のスレッドからメッセージを託されます。
      オーバーライド:
      preferenceChanged、クラス: View
      パラメータ:
      child - 子ビュー
      width - 幅の設定が変更されている場合はtrue
      height - 高さの設定が変更されている場合はtrue
      関連項目:
      JComponent.revalidate()
    • setSize

      public void setSize​(float width, float height)
      ビューのサイズを設定します。 これにより、ビューでレイアウト情報がキャッシュされていると、ビューのレイアウトが行われます。

      主軸は非同期に更新され、タイリングされた子の合計でなければならないため、主軸に対する呼出しは無視されます。 主軸に柔軟性があるため、小スパンが変更されると処理がキューに入り、子のサイズが変更されます。

      オーバーライド:
      setSize、クラス: View
      パラメータ:
      width - 幅>= 0
      height - 高さ>= 0
    • paint

      public void paint​(Graphics g, Shape alloc)
      指定された割当ておよびレンダリング表面を使って、ビューをレンダリングします。

      描画の対象範囲、つまりクリップされていない領域が最新のものかどうかを判定するために実装されます。 最新のものであれば子が描画されます。 最新のものでない場合、対象領域を作成するタスクが優先度の高いタスクとしてレイアウトのキューに置かれます。 このメソッドはイベント・スレッドごとに、準備ができていれば描画により移動し続け、準備ができていない場合は延期します(ペイント要求はスケジュール変更可能であるため)。

      定義:
      paint、クラス: View
      パラメータ:
      g - 使用する描画表面
      alloc - 描画するために割り当てられた領域
      関連項目:
      View.paint(java.awt.Graphics, java.awt.Shape)
    • getPreferredSpan

      public float getPreferredSpan​(int axis)
      このビューに適切なスパンを軸に沿って指定します。
      定義:
      getPreferredSpan、クラス: View
      パラメータ:
      axis - View.X_AXISまたはView.Y_AXIS
      戻り値:
      ビューの描画先のスパン>= 0。 通常、ビューは返されたスパン内に描画されるよう求められるが、その保証はない。 親はビューのサイズの変更や分割を行う可能性がある。
      例外:
      IllegalArgumentException - 軸が無効な型
    • getMinimumSpan

      public float getMinimumSpan​(int axis)
      このビューの最小スパンを軸に沿って指定します。
      オーバーライド:
      getMinimumSpan、クラス: View
      パラメータ:
      axis - View.X_AXISまたはView.Y_AXIS
      戻り値:
      ビューの描画先のスパン>= 0。 通常、ビューは返されたスパン内に描画されるよう求められるが、その保証はない。 親はビューのサイズの変更や分割を行う可能性がある。
      例外:
      IllegalArgumentException - 軸が無効な型
      関連項目:
      View.getPreferredSpan(int)
    • getMaximumSpan

      public float getMaximumSpan​(int axis)
      このビューの最大スパンを軸に沿って指定します。
      オーバーライド:
      getMaximumSpan、クラス: View
      パラメータ:
      axis - View.X_AXISまたはView.Y_AXIS
      戻り値:
      ビューの描画先のスパン>= 0。 通常、ビューは返されたスパン内に描画されるよう求められるが、その保証はない。 親はビューのサイズの変更や分割を行う可能性がある。
      例外:
      IllegalArgumentException - 軸が無効な型
      関連項目:
      View.getPreferredSpan(int)
    • getViewCount

      public int getViewCount()
      このビュー内のビューの数を返します。 デフォルトでは複合ビューにならないので、このメソッドは0を返します。
      オーバーライド:
      getViewCount、クラス: View
      戻り値:
      ビューの数>= 0
      関連項目:
      View.getViewCount()
    • getView

      public View getView​(int n)
      n番目の子ビューを返します。 デフォルトでは子がないので、このメソッドはnullを返します。
      オーバーライド:
      getView、クラス: View
      パラメータ:
      n - 取得するビューの番号。0以上でgetViewCount()より小さい値
      戻り値:
      ビュー
    • getChildAllocation

      public Shape getChildAllocation​(int index, Shape a)
      指定された子ビューの割り当てを取得します。 このメソッドを使用すると、ビューがそれらの位置を格納していることを仮定することなく、さまざまなビューがどこにあるかを知ることができます。 デフォルトでは子ビューを持たないので、このメソッドはnullを返します。
      オーバーライド:
      getChildAllocation、クラス: View
      パラメータ:
      index - 子のインデックス。0以上でgetViewCount()より小さい値
      a - このビューに対する割当て。
      戻り値:
      子に対する割当て
    • getViewIndex

      public int getViewIndex​(int pos, Position.Bias b)
      モデル内の指定された位置を表す子ビューのインデックスを返します。 デフォルトでは、ビューに子がないので、あらゆる位置に対して有効な子インデックスがないことを表すには、-1を返すように実装されています。
      オーバーライド:
      getViewIndex、クラス: View
      パラメータ:
      pos - 位置>= 0
      b - バイアス
      戻り値:
      指定された位置を表すビューのインデックス。その位置を表すビューがない場合は -1
      導入されたバージョン:
      1.3
    • modelToView

      public Shape modelToView​(int pos, Shape a, Position.Bias b) throws BadLocationException
      ドキュメント・モデルの座標空間からビューの座標空間へのマッピングを提供します。
      定義:
      modelToView、クラス: View
      パラメータ:
      pos - 変換対象の位置>= 0
      a - 描画するために割り当てられた領域
      b - 位置が2つのビューの境界である場合に、オフセットによって表される直前の文字または次の文字へのバイアス。
      戻り値:
      指定された位置のバウンディング・ボックス
      例外:
      BadLocationException - 指定された位置が、関連するドキュメント内の有効な位置を示さない場合
      IllegalArgumentException - bias引数が無効な場合
      関連項目:
      View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
    • viewToModel

      public int viewToModel​(float x, float y, Shape a, Position.Bias[] biasReturn)
      ビューの座標空間からモデルの論理座標空間へのマッピングを提供します。 biasReturn引数は、指定された点がモデル内の次の文字と近いのか、あるいはモデル内の前の文字と近いのかを示します。

      このメソッドはGUIスレッドによって呼び出され、関連するモデルで読取りロックを保持します。 子ビューを配置してChildLocatorオブジェクトのロックを使ってその子ビューの割り当てを決定し、レイアウト・スレッドとの相互作用を避けるためにChildStateオブジェクトのロックを使って子ビューのviewToModelを呼び出すために実装されます。

      定義:
      viewToModel、クラス: View
      パラメータ:
      x - X座標>= 0
      y - Y座標>= 0
      a - 描画するために割り当てられた領域
      biasReturn - 戻りバイアス
      戻り値:
      指定されたビュー内の点をもっとも適切に表現するモデル内の位置。0以上。 biasReturn引数は、指定された点がモデル内の次の文字と近いのか、あるいはモデル内の前の文字と近いのかを示します。
    • getNextVisualPositionFrom

      public int getNextVisualPositionFrom​(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException
      キャレットが配置される可能性のある、視覚的に表された次のモデル位置を決定する手段を提供します。 ビューによっては、可視ではないか、モデル内と同じ順序でないか、またはモデル内の一部の位置へのアクセスを許可しない場合があります。 このメソッドを使用すると、0以上の範囲内で変換する位置を指定できます。 値が-1の場合は、位置が自動的に計算されます。 値が-1よりも小さい場合は、BadLocationExceptionがスローされます。
      オーバーライド:
      getNextVisualPositionFrom、クラス: View
      パラメータ:
      pos - 変換対象の位置
      a - 描画するために割り当てられた領域
      direction - 現在位置からの方向。これは、キーボードに通常存在する矢印キーと見なすことができ、次のいずれかになる。
      • SwingConstants.WEST
      • SwingConstants.EAST
      • SwingConstants.NORTH
      • SwingConstants.SOUTH
      biasRet - チェックされたバイアスを含む配列
      b - バイアス
      戻り値:
      次の可視の位置をもっともよく表す、モデル内の位置
      例外:
      BadLocationException - 指定された位置がドキュメント内の有効な位置でない場合
      IllegalArgumentException - directionが無効である場合