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」を参照してください。
このリリースから、データ転送システムの一部として
XDnD プロトコルサポートが実装されています。このリリースより前は、X11 でサポートされていたのは Motif DnD プロトコルのみでした。
4009555: デスクトップ上のマウス位置を取得
デスクトップ上のマウス位置を取得するための API が追加されました。新しい
PointerInfo クラスは、
PointerInfo
インスタンスの作成時のポインタ座標と関連付けられた
GraphicsDevice
オブジェクトを記述します。
PointerInfo
には次のメソッドがあります。
新しい MouseInfo クラスは、マウスポインタの現在の位置に関する情報を持ちます。MouseInfo
には 2 つのメソッドがあります。
その他の新しいメソッド:
4632143: Window、Frame、または Dialog を常に手前に表示
特定の
Window
、
Frame
、または
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: ドラッグソースイベントコンストラクタのドキュメント明確化
ドラッグソースイベントの次のコンストラクタに無効なパラメータを渡すことに関するドキュメントが明確化されました。
- 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 が 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 メソッドは、
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 以降