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

クラスJViewport

java.lang.Object
すべての実装されたインタフェース:
ImageObserver, MenuContainer, Serializable, Accessible

public class JViewport extends JComponent implements Accessible
ベースとなる情報を見るために使用する「ビュー・ポート(窓)」です。 スクロールするときに移動するのがビュー・ポートです。 これは、カメラのファインダを覗くことに似ています。 ファインダを上に向かって動かすと、新しいものが視野のいちばん上に入り、いちばん下にあったものが視野から消えます。

デフォルトでは、JViewportは不透明です。 これを変更する場合は、setOpaqueメソッドを使用します。

ノート:描画する際にバッファを必要としない高速スクロール・アルゴリズムを実装しました。 アルゴリズムの機能は次のとおりです。

  1. ビューと親ビューが、JComponentsでない場合は、ビューと親ビューがチェックされて、ビューポート全体が停止および再描画されます。
  2. ビュー・ポートがほかの上位クラスによって隠されている場合は、中止してビュー・ポート全体をペイントし直す。
  3. 表示可能になる領域を計算する。ビュー・ポートとサイズが同じ場合は、中止して領域全体をペイントし直す。
  4. 上位クラスのWindowグラフィックスを取得して、スクロールした領域のcopyAreaをペイントし直す。
  5. ビューに新しく表示された領域をペイントし直すようメッセージを送る。
  6. 次にビュー・ポートにペイントが呼び出されたときに、クリッピング領域がビューポート・サイズより小さい場合には、タイマーが開始され全体をペイントし直す。
通常、この方法の方が格段に速くできます。 バッキング・ストア法と比較すると、この方法はオフスクリーン・バッファを維持するオーバーヘッドとcopyAreaを2回実行することを避けることができます。 バッキング・ストア以外の場合と比較すると、ペイント領域を大幅に削減できます。

この方法は、ビューポートが他のウィンドウで隠されるか、または部分的にオフスクリーンである場合、バッキング・ストア法よりも速度が遅くなります。 他のウィンドウでビューポートが隠されると、copyAreaがガベージをコピーし、システムがペイント・イベントを生成して、新たに出現した領域をペイントする必要があることを通知します。 これを処理する唯一の方法は、ビューポート全体をペイントしなおすことです。ただし、バッキング・ストアの場合に比べてパフォーマンスが低下することがあります。 ほとんどのアプリケーションでは、ごくまれに、ビューポートが他のウィンドウで隠されている、またはオフスクリーンであるときにユーザーがスクロールすることがあるため、この最適化機能はビューポートが隠された場合のパフォーマンス・ヒットとして多くの場合価値があります。

警告: Swingはスレッドに対して安全ではありません。 詳細は、「Swing's Threading Policy」を参照してください。

警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4では、すべてのJavaBeansの長期ストレージのサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。

導入されたバージョン:
1.2
関連項目: