Java 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 つのメソッドがあります。

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

java.awt.Component.getMousePosition()
java.awt.Container.getMousePosition(boolean)
java.awt.Toolkit.getMouseInfoPeer

Window のバグ修正と拡張機能

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

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

システム設定によっては、alwaysOnTop Window、Frame、または Dialog がサポートされない場合があります。これらは、Microsoft Windows、GNOME2/Metacity を実行する Linux と Solaris、および KDE/kwin を実行する Linux でサポートされています。CDE/dtwm を実行する Solaris ではサポートされていません。alwaysOnTop ウィンドウが、上記以外のセッションおよびウィンドウマネージャーを実行する 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) に移動するように要求されたウィンドウが、ウィンドウのタイトルと左ボーダーがオフスクリーンになるように配置されます。これは、2 つのウィンドウマネージャー群が、X11 プログラムがウィンドウを配置するために作成する ConfigureRequest 要求の ICCCM 仕様解釈に同意しないためです。

この問題に対処するために、_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: Clipboard 内の情報を照会するための新しいメソッド

次の 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 が一貫した方法で呼び出されるようになった

DragSourceAdapter および DragSourceAdapter クラスのクラス仕様と、DragSourceAdapter.dragExit および DragSourceListener.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 が GridBagLayout 内にないときにどうなるかを明確化するドキュメントが追加されました。

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

GridBagLayout.gridwidth/gridheight のクラス仕様で、REMAINDER と RELATIVE の説明が混乱を招いていました。このドキュメントは修正されました。

FlowLayout のバグ修正

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

4586806: 配置に関する FlowLayout 仕様が訂正された

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

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

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

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

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

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

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

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

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

その他のバグ修正

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

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

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

これまでは、AWTKeyStroke.toString からの出力を getAWTKeyStroke メソッドに渡せませんでした。これはそのように変更されました。

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

次の List メソッドの仕様が、範囲が境界を越えているときに未指定動作になることを記述するように明確化されました。

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

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

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

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

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

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

4829063: Scrollbar つまみが表示されない場合があることが Scrollbar に明記された

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

4840172: KeyEvent.getKeyChar の動作が明確化された

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

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

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

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

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

4691481: Robot.createScreenCapture の仕様を更新

これまでの Robot.createScreenCapture のドキュメントは、キャプチャーしたイメージにマウスカーソルが含まれないことを記述していませんでした。これは、Solaris、Linux、Windows、および Mac OS X で常に適用されます。この情報を反映するようにドキュメントが更新されました。

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

Insets を設定するための単一メソッド 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 がクラッシュする場合がある

MToolKit を実行する Solaris/Linux で、drop メソッドから JOptionpane を表示すると JVM がクラッシュする場合があります。このバグは今後のリリースで対処される予定です。

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

リリース 1.4.2 以前で、Mozilla 内でアプレットを実行するとフォーカス関連のバグが見られました。このオブジェクトには次のものが含まれます。 この問題を解決するために、XEmbed プロトコルのクライアント側が実装されました。 ただし、ブラウザが機能するためには、ブラウザが XEmbed のサーバー側をサポートするべきです。次のブラウザを Java で使用することをお勧めします。

Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.