JavaTM 2 SDK, v1.3 での AWT の拡張 |
ドキュメントの目次 |
バージョン 1.3 の Java 2 SDK では、次の AWT の機能が追加されています。複数モニターのサポート
新しいクラス java.awt.Robot
描画イベントと呼び出しイベントのための新しいイベントマスク
描画 (Paint) の統合
印刷 API の拡張
コンポーネント階層に対する変更を追跡するための新しいイベント型
AWT Native Interface
複数モニターのサポート新しいクラス java.awt.Robot新しい Frame コンストラクタ Frame(GraphicsConfiguration) を使用すると、別の画面デバイス上に Frame オブジェクトを生成することができます。
新しい Window コンストラクタ Window(Window, GraphicsConfiguration) は、画面デバイスの 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.この例の中で GraphicsConfiguration の境界が考慮されていない場合、JFrame はメイン画面の (i*50, i*60) の位置に表示されます。これは、指定された GraphicsConfiguration の画面と異なる場合があります。
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();
}
}
Java 2D API によるマルチスクリーン環境サポートについての詳細は、Java 2D API プログラマーズガイドの 「マルチスクリーン環境でのレンダリング」を参照してください。
java.awt.Robot という新しいクラスが、JavaTM 2 プラットフォームに追加されました。Robot API は、自動化された AWT および Swing をテストできるように設計されています。Robot API では、Java プログラミング言語で記述されたコードを使用して、低レベルのネイティブマウスおよびネイティブキーボードの入力イベントを生成できます。これらのイベン トは、Java イベントキューまたはコンポーネントレベルではなく、オペレーティングシステムレベルで生成されるため、その他の AWT イベント (ネイティブコードおよび Java 言語を含む) に対する実際のユーザ入力と区別することができます。Robot API はテスト用に設計されていますが、次の利点もあります。
- Accessibility (ユーザ補助機能) が有効なアプリケーションの場合は、より詳細なフィードバックを行うことができる。たとえば、ユーザが音声コマンドを使用して画面オブジェクトを操作した 場合に、オブジェクトが操作されていることがマウスポインタの動きによって把握できる
- コンピュータベースのトレーニング (CBT) およびその他のデモタイプの Java アプリケーションを作成できる
PAINT_EVENT_MASK および INVOCATION_EVENT_MASK という新しい final static フィールド が、クラス AWTEvent に追加されました。これらのフィールドを addAWTEventListener() で使用すると、クライアントアプリケーションで描画イベントおよび呼び出しイベントをリスンすることができます。描画の実装を統合することによって、描画のパフォーマンスが向上しました。再描画が必要な領域は、イベントキューに送られる ときに、矩形以外の単一の再描画領域に統合されます。この結果、再描画のバッチ処理、および複数の再描画の同時実行を行うことができます。以前は、再描画 領域が重なっている場合でも、描画イベントはキューに登録されてから順番に実行されていました。パッケージ java.awt.print に次の 2 つのクラスが追加されました。 クラス JobAttributes では、出力先、コピー数、ページ範囲など、印刷ジョブの属性が制御されます。クラス PageAttributes では、用紙のサイズ、向き、印刷品質など、印刷ページの属性が制御されます。これらのクラスは、クラス java.awt.Toolkit の新しいメソッドで使用されます。
getPrintJob(Frame, String, JobAttributes, PageAttributes)「Java AWT:印刷」を参照してください。今後の Java プラットフォームのリリースでは、属性の使用に対するサポートが印刷 API に追加される予定です。
コンポーネント階層に対する変更を追跡するための新しいイベント型
Java 2 プラットフォームに対して新しいクラスがいくつか追加され、コンポーネント階層に対する変更を追跡するための標準的な方法が提供されます。新しい API は、 javax.swing.event.AncestorEvent によって提供される API の望ましい代替品となります。新しいイベントタイプが実装されている新しいクラスおよびインタフェースです。
- 表示可能性 - コンポーネントにピアが存在するかどうか
- 表示状態 - コンポーネントが画面に表示されているかどうか
- 階層に対して祖先の追加および削除が行われたかどうか
- 祖先のサイズ再設定
- 祖先の移動
次のメソッドが java.awt.Component に追加されました。 次のフィールドが java.awt.AWTEvent に追加されました。 クラス java.awt.AWTEventMulticaster に対して、インタフェース HierarchyListener および HierarchyBoundsListener が実装されました。また、次の新しいメソッドを使用できます。
- java.awt.event.HierarchyEvent
- java.awt.event.HierarchyListener
- java.awt.event.HierarchyBoundsListener
- java.awt.event.HierarchyBoundsAdapter
AWT Native Interface は、Java 2 プラットフォームにネイティブ描画エンジンを統合するための新しいインタフェースです。AWT Native Interface を使用すると、最良の描画パフォーマンスを発揮するネイティブの描画コンポーネントを使って UI を設計できます。最も一般的な使用方法では、次の 4 つのステップが含まれます。
AWT Native Interface 関連のヘッダファイルは、SDK の include ディレクトリに格納されています。これらは以下のとおりです。
- Canvas を継承するクラスを定義する
- paint メソッドをネイティブとして宣言し、その共有ライブラリを静的ブロック内でロードする
- javah を使って、ネイティブな paint メソッド用の C/C++ ヘッダファイルを生成する (See javah documentation for Windows and Solaris platforms.)
- ネイティブの paint メソッドを記述し、それを共有ライブラリとして構築する
これらのヘッダは、Java 2 プラットフォームの正式な仕様ではありません。これらのヘッダは、ネイティブ描画機能への標準的なアクセス方法が必要な開発者に提供されます。
- include/jawt.h - Win32 および SolarisTM プラットフォーム
- include/win32/jawt_md.h - Win32 SDK のみ
- include/solaris/jawt_md.h - Solaris SDK のみ
より詳細な情報およびサンプルコードについては、「AWT Native Interface」を参照してください。
Copyright ©1999 Sun Microsystems, Inc. All Rights Reserved. コメントの送付先: java-awt@java.sun.com |