Java

JavaTM 2 Platform Standard Edition 5.0 の AWT 機能拡張

ドキュメントの目次
主な変更点
Window のバグの修正と拡張
ドラッグ&ドロップおよびデータ転送のバグの修正と拡張
レイアウトのバグの修正
その他のバグの修正
既知のバグと問題

主要な変更点

4615479: Solaris および Linux 上の XToolkit

このリリースでは、AWT が Solaris および Linux プラットフォーム上に再実装されました。Linux 上で Motif ツールキット 、または Solaris 上で XAWT を強制的に実行することが可能になります。これは、AWT_TOOLKIT 変数を設定するか、-Dawt.toolkit コマンド行パラメータを使用して行います。XAWT の値は sun.awt.X11.XToolkit、Motif の値は sun.awt.motif.MToolkit です。詳細については、「Solaris/Linux 上の XToolkit」を参照してください。

4638443: XDnD のサポート

このリリースでは、データ転送システムの一部として XDnD プロトコルのサポートが実装されています。このリリース以前は、X11 でサポートされていたのは Motif DnD プロトコルのみでした。

4009555: デスクトップ上のマウス位置の取得

デスクトップ上のマウス位置を取得するために API が追加されました。新しい PointerInfo クラスは、PointerInfo インスタンスの作成時のポインタ座標とその関連 GraphicsDevice オブジェクトを記述します。PointerInfo には、次のメソッドがあります。

新しい MouseInfo クラスは、マウスポインタの現在の位置に関する情報を持ちます。MouseInfo には、次の 2 つのメソッドがあります。

その他の新しいメソッド:

Window のバグの修正と拡張

4632143: Window、Frame、または Dialog を常に手前に表示

特定の WindowFrame、または Dialog がデスクトップの常に手前に表示されるようにするために新しい API が追加されました。ツールボックス、通知、または情報アプレットなどの特定の GUI 要素、およびその他のデスクトップ拡張機能を実装するときに役に立ちます。新しい API および 変更された API には、以下のものが含まれます。

システム設定によっては、常に手前に表示する Window、Frame、または Dialog がサポートされない場合があります。これらは、Microsoft Windows、GNOME2/Metacity を実行中の Linux、Solaris、および KDE/kwin を実行中の Linux でサポートされています。CDE/dtwm を実行中の Solaris ではサポートされていません。常に手前に表示するウィンドウが、上記以外のセッションおよびウィンドウマネージャを実行中の Linux または Solaris で機能しない可能性があります。

4102292: プラットフォーム別にウィンドウのデフォルト位置を指定するための新しい API

2 つの新しいメソッドと 1 つの新しいプロパティによって、ユーザはプラットフォームに適した新しい Window のデフォルト位置を指定することができます。これは、特に X11 に重要です。新しい API には、以下のものが含まれます。 基盤のウィンドウマネージャが独自のロジックに従ってウィンドウをタイリングするためには、locationByPlatform プロパティを true に設定する必要があります。true に設定しない場合、AWT はウィンドウが意図的に 0,0 に配置されたのか、指定されなかっただけなのかを認識できないため、ウィンドウは画面の左上隅に配置されます。

4101435: Window/Dialog/Frame.setLocation が期待通りに機能しないことがある

Windows、Dialog、および Frame の位置とサイズは、アプリケーションやツールキットではなく、デスクトップのウィンドウ管理システムによって管理されます。ウィンドウマネージャは、ウィンドウ配置要求を自由に無視または変更できます。このため、Window.setLocation(x, y) の呼び出し時に、位置 (x, y) に移動する Window に依存することはできません。同じ状況が Window.setSize と Window.setBounds に存在します。これを説明するために Window のドキュメントが明確になりました。

4401846: 新しい _JAVA_AWT_WM_STATIC_GRAVITY 環境変数

ウィンドウマネージャよっては、AWT ウィンドウを間違って配置する場合があります。たとえば、一部のウィンドウマネージャでは、(0,0) に移動するように要求されたウィンドウは、ウィンドウのタイトルと左の境界線がオフスクリーンになるように配置されます。これは、ウィンドウを配置するために X11 プログラムが作成する ConfigureRequest 要求に対する ICCCM 仕様の解釈に同意しないウィンドウマネージャのグループが 2 つあるためです。

この問題に対処するために、_JAVA_AWT_VM_STATIC_GRAVITY 環境変数が追加されました。これにより、 パワーユーザはウィンドウマネージャが StaticGravity の動作を実装することを示すことができます。

ドラッグ&ドロップおよびデータ転送のバグの修正と拡張

4378091: 新しい DropTarget.getTransferable メソッド

新しい java.awt.dnd.DropTargetDragEvent.getTransferable メソッドにより、ドラッグ操作中にドロップターゲットが転送データにアクセスできるようになります。

これにより、バグ「4248542: dragOver および dragEnter で DropTargetListener が transferable にアクセスできない」も修正されます。

4259272: クリップボードの内容の変更の通知がサポートされるようになった

これまで、Java クリップボード API では、クリップボード上の使用可能な DataFlavors の変更を追跡したり、それらの変更について関係するグループに通知したりするための効果的な方法を使用できませんでした。この目的のために、次の API が追加されました。

4287795: クリップボードの情報を問い合わせるための新しいメソッド

次の 3 つの新しいメソッドが追加されました。

4790833: Clipboard.getContents を使用してもメモリ使用は急上昇しない

このリリース以前は、Clipboard.getContents は、デフォルトフレーバマップに対応するデータフレーバへのマッピングが存在する、提供されたすべての形式のクリップボードデータを取り出しました。形式が多数で、データのサイズが大きい場合は、異なる形式の取り出しデータによって多くのメモリが消費されました。バグの修正 4287795 で導入された新しいメソッドにより、この問題は解決されました。

4415175: ドラッグ&ドロップジェスチャー動作のしきい値をグローバルに変更するための新しい API

ドラッグ動作ジェスチャーのしきい値は、データ転送システムがドラッグ操作を初期化する前にカーソルがドラッグされたピクセル数を表します。このリリース以前は、これは 5 ピクセルにハードコードされていました。リリース 5.0 では、ドラッグ感度のデスクトッププロパティを選択し、それをしきい値にマッピングするようサポートされています。また、新しい API によってユーザはこのしきい値を取得および変更できます。新しい API には、以下のものが含まれます。

4712068: テキストをドラッグする場合のドラッグ&ドロップの操作性の問題

このリリース以前は、X プラットフォームで使用されるドロップアイコンのホットスポットは、アイコンの中央にありました。テキストをドラッグすると、テキストカーソルが移動して現在のドロップ位置が示されますが、これは、ドロップアイコン自体によって隠されていました。このリリースでは、X プラットフォームで使用されるドロップカーソルは、ドロップアイコンの左上隅を示すように変更されました。それによって、対応するホットスポットが変更されました。

4191708: いくつかの java.awt.dnd.DropTarget メソッドの仕様の明確化

次の java.awt.dnd.DropTarget メソッドに対する null パラメータの引き渡しに関するドキュメントが明確化されました。

4819437: DragSourceListener.dragExit の一貫した呼び出し方法

DragSourceAdapterDragSourceAdapter クラスのクラス仕様、および DragSourceAdapter.dragExitDragSourceListener.dragExit メソッドのドキュメントが更新され、ドロップ領域が以前の dragEnter の呼び出しに関連付けられる概念が明確化されました。

4654688: SystemFlavorMap メソッドとドキュメントの一貫性

SystemFlavorMap クラスは、ネイティブと Java アプリケーション間のデータ転送をサポートするために、ネイティブ形式と Java データフレーバ間のマッピングを格納するときに使用されます。SystemFlavorMap.getNativesForFlavor(DataFlavor) メソッドのドキュメントが明確化され、DataFlavor (またはネイティブ形式) は、少なくとも 1 つの静的マッピングが関連付けられている場合に限り認識されることが記述されました。

4123385: ドラッグソースイベントコンストラクタのドキュメントの明確化

ドラッグソースイベントの次のコンストラクタに対する無効なパラメータの引き渡しに関するドキュメントが明確化されました。

レイアウトのバグの修正

GridBagLayout のバグの修正

GridBagLayout:GridBagLayout に対していくつかのバグ修正が実装されました。これらのバグのうち 2 つはドキュメントに対してだけ適用されます。最も重要なバグの修正には、次のものが含まれます。

4254022: GridBagLayout で 512 を超える水平または垂直コンポーネントが可能

これまでは、GridBagLayout は、 幅と高さが 512 にハードコードされた制限で実装されていましたが、動的に割り当てられるようになり、MAXGRIDSIZE 定数は使用されなくなりました。

4532201: GridBagLayout.lookupConstraints のドキュメントの明確化

指定された Component がグリッドバッグレイアウトにないときにどうなるかについてのドキュメントが追加されました。

4618355: GridBagLayout.gridwidth/gridheight のドキュメントの明確化

GridBagLayout.gridwidth/gridheight のクラス仕様の REMAINDER と RELATIVE の説明が分かりにくくなっていました。このドキュメントは修正されました。

FlowLayout のバグの修正

FlowLayout:FlowLayout に関するいくつかのドキュメントのバグが修正されました。

4586806: 配置に関する FlowLayout 仕様の修正

これまで、クラス仕様には、コンポーネントが行の中央に配置されると記述されていました。実際には、align プロパティがコンポーネントの配置方法を決定します。このドキュメントは修正されました。

4881919: FlowLayout クラス仕様は、コンポーネントが常に左から右であることを意味しない

FlowLayout クラス仕様は、右から左に移動する機能が追加される前に記述されました。このため、可能な方向が左から右だけであることを前提としていました。このドキュメントは修正されました。

4587456: FlowLayout コンストラクタの仕様の修正

これまで、FlowLayout コンストラクタのドキュメントでは、hgap と vap がコンポーネントとコンテナボーダ間、およびコンポーネント間の間隔に適用されることについて説明していませんでした。このドキュメントは修正されました。

4172932: BorderLayout の子の制約を取得するための新しいメソッド

3 つの public メソッドが BorderLayout に追加されました。1 つはコンポーネントの制約を取得するもので、あとの 2 つは指定された制約のコンポーネントを異なる方法で取得するものです (一方はコンポーネントの方向を考慮し、もう一方は考慮しない)。新しいメソッドは次の 3 つです。

4515041: vgap および hgap パラメータに関する GridLayout.layoutContainer 仕様の明確化

これまで、layoutContainer の仕様では、vgap と hgap は各セル間および最初/最後のセルとボーダ間に追加されると記述されていました。実際には、コンポーネント間にのみギャップが適用されます。ドキュメントのこの仕様は修正されました。

その他のバグの修正

4533021: 子の Z 順序を変更するための新しい API

Container の子の z 順序を指定するための新しい API が追加されました。新しい Container メソッドは、次の 2 つです。

4370733: AWTKeyStroke.getAWTKeyStroke(String) と toString が対称になった

これまでは、AWTKeyStroke.toString から出力を取得し、getAWTKeyStroke メソッドに渡すことができませんでした。メソッドに渡せるように修正されました。

4341785: いくつかの List メソッドの仕様の明確化

次の List メソッドの仕様が明確化され、範囲が境界を越えている場合の指定されていない動作の結果について記述されました。

4368570: 選択した項目のクリック動作に関する List 仕様の明確化

これまで、List のクラス仕様では、選択されていない項目をクリックするとその項目が選択され、選択されている項目をクリックするとその項目の選択が解除されると記述されていました。これは、リストが複数選択モードの場合にのみあてはまります。単一選択モードでは、リストのどの項目をクリックしてもクリックした項目が選択されます。この仕様は明確化されました。

4082708: ContainerEvent.getContainer メソッドの仕様の明確化

ContainerEvent.getContainer メソッドは、ソースContainer 型であることを前提としています。これまで、先に確認することなく、ソースは Container 形式にキャストされていました。これにより ClassCastException が返される可能性がありました。ソースが Container ではない場合は null の値を返すようにメソッドが変更されました。

4620715: 2 つの標準 Microsoft Windows キー用の新しい KeyEvent コード

標準 Microsoft Windows キーボード上の 2 つのキーには、 Java キーコード (ウィンドウキーとコンテキストメニューキー) がありません。これにより、508 要件を満たす機能が妨げられます。このため、java.awt.event.KeyEvent.VK_WINDOWS および java.awt.event.KeyEvent.VK_CONTEXT_MENU キーコードが追加されました。

4829063: Scrollbar で、スクロールバーサムが表示されない可能性があることが明記された

これまで、Scrollbar.getVisibleAmount と setVisibleAmount のドキュメントには、サムが表示されない可能性があることが記述されておらず、スクロールバーの範囲が何に使用されるかについて説明されていませんでした。この仕様は整理されました。これは、ドキュメントのみの変更です。

4840172: KeyEvent.getKeyChar の動作の明確化

KeyEvent.getKeyChar の使い方については、KeyEvent クラスドキュメントで説明されていますが、メソッド自体のドキュメントは短いものでした。getKeyChar のドキュメントはこのリリースで改善されました。

4233061: ENTER が ActionEvent をトリガしない仕様の明確化

フォーカスが Button にあるときに、ENTER キーを押しても ActionEvent がトリガされないことが、一部の開発者を混乱させています。これは正しい動作です。ActionEvent は、スペースバーによってトリガされます。ActionEvent クラス仕様は、この事実を明確にするために更新されました。

4221123: 新しい FileDialog コンストラクタ

3 つの FileDialog コンストラクタが新しく追加されました。これらのコンストラクタでは、Dialog を所有者として指定できます。

4691481: Robot.createScreenCapture の仕様の更新

これまで、Robot.createScreenCapture のドキュメントで、取り込んだイメージにマウスカーソルが含まれないことが記述されていませんでした。この動作は、Solaris、Linux、Windows、および Mac OS X で必ず起こります。 この情報を反映するようにドキュメントが更新されました。

4704042: Insets を設定するための新しいメソッド

Insets を設定するための 1 つのメソッド set(int, int, int, int) が追加されました。

4492739: InputEvent.ALT_MASK/BUTTON2_MASK および META_MASK/BUTTON3_MASK ドキュメントの明確化

一部の InputEvent 定数の値に重複があります。KeyEvent.getModifiersExText(int) および MouseEvent.getMouseEventModifiersText(int) を呼び出すときに、KeyEvent.BUTTON2_MASK に対して返される文字列は「Alt」、KeyEvent.BUTTON3_MASK に対して返される文字列は「Meta」であるため混乱します。このリリースでは、これを明確にするために、InputEvent、KeyEvent、および MouseEvent クラスにドキュメントが追加されました。

既知のバグと問題

次に、リリース 5.0 で発生する可能性がある既知の問題のリストを示します。

Metacity のバージョン管理

最新ビルドの Metacity (現在 2.6.2) を使用することをお勧めします。すでに修正されましたが、2.4.34 より前のバージョンを使用すると発生するバグがいくつかありました (プログラムによるアイコン化に関する問題、サイズ変更できないフレームなど)。

5051557: アプレットフォーカスの非互換性

アプレットの中には、キーボードのキーを押しても、期待される結果が得られないという報告が寄せられています。これは通常、アプレットに子コンポーネントがない場合に、アプレットは自動的にフォーカスを行わないので発生します。このようなアプレットが、さまざまなプラットフォーム間で確実に実行されるようにするには、起動時 (requestFocus を使用) およびマウスを押した場合にフォーカスを要求することが推奨されています。フォーカスが必要ない場合、setFocusable(false) を呼び出します。

5050387: drop() から JOptionPane が呼び出されると JVM がクラッシュする可能性がある

Solaris/Linux 上で、drop メソッドが JOptionpane を表示している MToolKit が実行されている場合、JVM がクラッシュする可能性があります。このバグは今後のリリースで対処されます。

アプレット実行時のフォーカスバグ

リリース 1.4.2 以前の Mozilla でアプレットを実行するときに顕著なフォーカス関連のバグがありました。このオブジェクトには次のものが含まれます。
  • 4907493: 入力フォーカスが複数のアプレットで機能しない
  • 4902616: Java Plug-in テストの実行時にテキストフィールドの文字を削除できない
  • 4877530: テキストを 1.4.1_02 の JTextField に入力できない
  • 4806274: requestFocus メソッドでフォーカスが Solaris 上の Netscape 7 のコンポーネントに移動しない
  • 4816394: SpreadSheet に何も入力できない
  • 4837794: Java アプレットで ログイン AnswerCenter に文字を入力できない
  • 4902609: Java テストケースの実行時に Tab キーが機能しない
この問題を解決するために、XEmbed プロトコルのクライアント側が実装されました。
  • 4849238: AWT への XEmbed サポートの追加
  • 4907325: Motif ツールキットには XEmbed の実装が必要
ただし、XEmbed が機能するためには、ブラウザが XEmbed のサーバ側をサポートしている必要があります。次のブラウザを Java で使用することをお勧めします。
  • Linux の場合、Mozilla Community Edition バージョン 1.5 以降
  • Solaris の場合、Sun Mozilla 1.4 以降


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


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