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」を参照してください。
このリリースから、データ転送システムの一部として
XDnDプロトコル・サポートが実装されています。このリリースより前は、X11でサポートされていたのはMotif DnDプロトコルのみでした。
4009555: デスクトップ上のマウス位置を取得
デスクトップ上のマウス位置を取得するためのAPIが追加されました。新しい
PointerInfoクラスは、
PointerInfo
インスタンスの作成時のポインタ座標と関連付けられた
GraphicsDevice
オブジェクトを記述します。
PointerInfo
には次のメソッドがあります。
新しいMouseInfoクラスは、マウス・ポインタの現在の位置に関する情報を持ちます。MouseInfo
には2つのメソッドがあります。
その他の新しいメソッド:
4632143: Window、Frame、またはDialogを常に手前に表示
特定の
Window
、
Frame
、または
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: ドラッグ・ソース・イベント・コンストラクタのドキュメント明確化
ドラッグ・ソース・イベントの次のコンストラクタに無効なパラメータを渡すことに関するドキュメントが明確化されました。
- DragSourceDragEvent(DragSourceContext, int int, int)
- DragSourceDragEvent(DragSourceContext, int int, int, int, int)
- DragSourceDropEvent(DragSourceContext)
- DragSourceDropEvent(DragSourceContext, int, boolean)
- DragSourceDropEvent(DragSourceContext, int, boolean, int, int)
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メソッドは、
source
が
Container
型であることを前提としています。これまでは、事前に確認することなくソースを
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内でアプレットを実行するとフォーカス関連のバグが見られました。このオブジェクトには次のものが含まれます。
- 4907493: 入力フォーカスが複数のアプレットで機能しない
- 4902616: Java Plug-inテストの実行時にテキスト・フィールドの文字を削除できない
- 4877530: テキストを1.4.1_02のJTextFieldに入力できない
- 4806274: requestFocusメソッドがフォーカスをSolaris上のNetscape 7上のコンポーネントに持ってこない
- 4816394: SpreadSheetに何も入力できない
- 4837794: AnswerCenterにログインするための文字をJavaアプレットで入力できない
- 4902609: Javaテスト・ケースの実行時にTabキーが機能しない
この問題を解決するために、XEmbedプロトコルのクライアント側が実装されました。
- 4849238: XEmbedサポートをAWTに追加
- 4907325: MotifツールキットのためにXEmbedを実装するべき
ただし、ブラウザが機能するためには、ブラウザがXEmbedのサーバー側をサポートするべきです。次のブラウザをJavaで使用することをお薦めします。
- Linuxの場合、Mozilla Community Edition version 1.5以降
- Solarisの場合、Sun Mozilla 1.4以降