Java SE 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を紹介します。

システム設定によっては、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に設定する必要があります。そうしない場合、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がグリッド・バグ・レイアウト内にないときにどうなるかを明確化するドキュメントが追加されました。

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つの異なる方法です(一方はコンポーネント方向を考慮し、もう一方は考慮しない)。新しいメソッドは次のとおりです。

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, 2020, Oracle and/or its affiliates. All rights reserved.