Java

JavaTM 2 SDK, v1.3 での AWT の拡張

ドキュメントの目次
バージョン 1.3 の Java 2 SDK では、次の AWT の機能が追加されています。
複数モニタのサポート
新しいクラス java.awt.Robot
描画イベントと呼び出しイベントのための新しいイベントマスク
描画 (Paint) の統合
印刷 API の拡張
コンポーネント階層に対する変更を追跡するための新しいイベント型
AWT Native Interface

複数モニタのサポート

ターゲット GraphicsDevice の GraphicsConfiguration を使用して Frame、JFrame、Window、または JWindow オブジェクトを生成することによって、複数の画面にレンダリングできるようになりました。

新規 Frame コンストラクタである Frame(GraphicsConfiguration) を使用すると、別の画面デバイス上に Frame オブジェクトを作成できます。

新しい Window コンストラクタ Window(Window, GraphicsConfiguration) は、不可視ウィンドウを新規に生成します。このとき、生成する不可視ウィンドウの所有者として指定した Window、および任意の画面デバイスの GraphicsConfiguration を使用します。

新規 GraphicsConfiguration の getBounds メソッドは、GraphicsConfiguration の境界をデバイス座標で返します。仮想デバイスがある場合、getBounds から返されるデバイス座標は仮想デバイス座標になります。

新しい Component の getGraphicsConfiguration メソッドは、その Component が生成された GraphicsConfiguration を返します。

複数の物理画面デバイスで構成される仮想デバイス構成では、GraphicsConfiguration オブジェクトの座標は、仮想座標系への相対座標になります。このため、Frame または Window の setLocation メソッドを呼び出す場合には、仮想座標を使用する必要があります。同様に、仮想デバイス環境で GraphicsConfiguration の getBounds を呼び出すと、仮想デバイス座標が返されます。

次のコード例は、GraphicsEnvironment 内の各画面デバイス上の GraphicsConfiguration ごとに、JFrame オブジェクトを生成する方法を示します。これは、GraphicsConfiguration の境界に対して JFrame の位置を示す座標のオフセットを設定し、指定された GraphicsConfiguration の画面に JFrame が確実に表示されるようにします。

        GraphicsEnvironment ge = GraphicsEnvironment.
                                 getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();
        for (int j = 0; j < gs.length; j++) { 
            GraphicsDevice gd = gs[j];
            GraphicsConfiguration[] gc = gd.getConfigurations();
            for (int i=0; i < gc.length; i++) {
                    JFrame f = new JFrame(gs[j].getDefaultConfiguration());
                    Canvas c = new Canvas(gc[i]);
                    Rectangle gcBounds = gc[i].getBounds();
                    int xoffs = gcBounds.x;
                    int yoffs = gcBounds.y;
                    f.getContentPane().add(c);
                    f.setSize(300, 150);
                    f.setLocation((i*50)+xoffs, (i*60)+yoffs);
                    f.show();
	    }
	}
	
この例の中で GraphicsConfiguration の境界が考慮されていない場合、JFrame はメイン画面の (i*50, i*60) の位置に表示されます。これは、指定された GraphicsConfiguration の画面と異なる場合があります。

Java 2D API によるマルチスクリーン環境サポートについての詳細は、『Java 2D API プログラマーズガイド』の 「マルチスクリーン環境でのレンダリング」を参照してください。

新しいクラス java.awt.Robot
java.awt.Robot という新しいクラスが、JavaTM 2 プラットフォームに追加されました。Robot API は、自動化された AWT および Swing をテストできるように設計されています。Robot API では、Java プログラミング言語で記述されたコードを使用して、低レベルのネイティブマウスおよびネイティブキーボードの入力イベントを生成できます。これらのイベントは、Java イベントキューまたはコンポーネントレベルではなく、オペレーティングシステムレベルで生成されるため、その他の AWT イベント (ネイティブコードおよび Java 言語を含む) に対する実際のユーザ入力と区別することができます。

Robot API はテスト用に設計されていますが、次の利点もあります。

描画イベントと呼び出しイベントのための新しいイベントマスク

PAINT_EVENT_MASK および INVOCATION_EVENT_MASK という新しい final static フィールドが、クラス AWTEvent に追加されました。これらのフィールドを addAWTEventListener() で使用すると、クライアントアプリケーションで描画イベントおよび呼び出しイベントをリスンすることができます。

描画 (Paint) の統合

描画の実装を統合することによって、描画のパフォーマンスが向上しました。再描画が必要な領域は、イベントキューに送られるときに、矩形以外の単一の再描画領域に統合されます。この結果、再描画のバッチ処理、および複数の再描画の同時実行を行うことができます。以前は、再描画領域が重なっている場合でも、描画イベントはキューに登録されてから順番に実行されていました。

印刷 API の拡張

パッケージ java.awt.print に次の 2 つのクラスが追加されました。 クラス JobAttributes では、出力先、コピー数、ページ範囲など、印刷ジョブの属性が制御されます。クラス PageAttributes では、用紙のサイズ、向き、印刷品質など、印刷ページの属性が制御されます。

これらのクラスは、クラス java.awt.Toolkit の新しいメソッドで使用されます。

getPrintJob(Frame, String, JobAttributes, PageAttributes)
印刷 API についての詳細は、「Java AWT: 印刷」を参照してください。

今後の Java プラットフォームのリリースでは、属性の使用に対するサポートが印刷 API に追加される予定です。

コンポーネント階層に対する変更を追跡するための新しいイベント型

Java 2 プラットフォームに対して新しいクラスがいくつか追加され、コンポーネント階層に対する変更を追跡するための標準的な方法が提供されます。新しい API は、javax.swing.event.AncestorEvent によって提供される API の望ましい代替品となります。 新しいイベントタイプが実装されている新しいクラスおよびインタフェースです。 次のメソッドが java.awt.Component に追加されました。 次のフィールドが java.awt.AWTEvent に追加されました。 クラス java.awt.AWTEventMulticaster に対して、インタフェース HierarchyListener および HierarchyBoundsListener が実装されました。また、次の新しいメソッドを使用できます。

AWT Native Interface

AWT Native Interface は、Java 2 プラットフォームにネイティブ描画エンジンを統合するための新しいインタフェースです。AWT Native Interface を使用すると、最良の描画パフォーマンスを発揮するネイティブの描画コンポーネントを使って UI を設計できます。

最も一般的な使用方法では、次の 4 つのステップが含まれます。

  1. Canvas を継承するクラスを定義する
  2. paint メソッドをネイティブとして宣言し、その共有ライブラリを静的ブロック内でロードする
  3. javah を使って、ネイティブな paint メソッド用の C/C++ ヘッダファイルを生成する (javah ドキュメントの Win32 版および Solaris 版を参照)
  4. ネイティブの paint メソッドを記述し、それを共有ライブラリとして構築する
AWT Native Interface 関連のヘッダファイルは、SDK の include ディレクトリに格納されています。これらは以下のとおりです。 これらのヘッダは、Java 2 プラットフォームの正式な仕様ではありません。これらのヘッダは、ネイティブ描画機能への標準的なアクセス方法が必要な開発者に提供されます。

より詳細な情報およびサンプルコードについては、「AWT Native Interface」を参照してください。


Copyright © 1999 Sun Microsystems, Inc. All Rights Reserved.


コメントの送付先:java-awt@java.sun.com
Sun