Popup
およびPopupFactory
JPopupMenu
やJToolTip
などの一定のComponent
は、特定の包含関係の階層内で自らをほかのすべてのComponent
の上に配置します。これらのComponent
は、それぞれが同じコードを含んで同じ動作を取得するのではなく、PopupFactory
から取得できるPopup
へ動作を委譲します。Popup
は、画面上の特定の位置でComponent
を表示することができます。要求されたComponent
のサイズと位置に基づいて、PopupFactory
は適切なPopup
を返します。
以前は、Popup
およびPopupFactory
が非公開でパッケージされていました。JDK 1.4では、これらのクラスを公開し、カスタム・ルック・アンド・フィールを実装することにより、独自のPopup
を作成できるようにしました。これで、ほかのルック・アンド・フィールも、それぞれ適切な方法でメニューを配置できるようになります。そのために以下のクラスを公開しました。
public class PopupFactory { public static void setSharedInstance(PopupFactory factory); public static PopupFactory getSharedInstance(); public Popup getPopup(Component owner, Component contents, int x, int y) throws IllegalArgumentException; }
public class Popup { protected Popup(Component owner, Component contents, int x, int y); protected Popup(); public void show(); public void hide(); }
JPopupMenu
に使用されるPopup
がUIで置き換えられるように、次がPopupMenuUI
に追加されました。
public Popup getPopup(JPopupMenu popup, int x, int y);
PopupMenuUI.getPopup
の実装は共有PopupFactory
からPopup
を取得しますが、カスタム・ルック・アンド・フィールの実装でこれをオーバーライドし、希望するどのようなPopup
でも返すことができます。
JPopupMenu
では以前、setLocation
メソッドを定義しました。このリリース以前は、このメソッドがPopup
上でsetLocation
を呼び出しましたが、このメソッドがPopup
から削除されたので、JPopupMenu
では現在のところ、Popup
を作成し直します。
JPopupMenu
は、setPopupSize
メソッドも定義しました。このメソッドは、表示可能であればPopup
上でsetSize
を呼び出しました。内部的には、このメソッドを変更してJPopupMenu
の希望サイズを設定するようにしましたが、同じ結果になります。これが呼び出されるときにJPopupMenu
が表示可能であれば、Popup
が再作成されます。JPopupMenu
のjavadocは、次の新しい動作を反映するように変更されました。
public void setPopupSize(Dimension d); public void setPopupSize(int width, int height);