Popup
および PopupFactory
JPopupMenu
や JToolTip
などの一定の Component
は、特定の包含関係の階層内で自らをほかのすべての Component
の上に配置します。 これらの Component
は、それぞれが同じコードを含んで同じ動作を取得するのではなく、PopupFactory
から取得できる Popup
へ動作を委譲します。 Popup
は、画面上の特定の位置で Component
を表示することができます。 要求された Component
のサイズと位置に基づいて、PopupFactory
は適切な Popup
を返します。
以前は、Popup
および PopupFactory
が非公開でパッケージされていました。 JDK 1.4 では、これらのクラスを公開して、カスタム Look & Feel の実装で独自の Popup
を作成できるようにしました。 これで、ほかの Look & Feel も、それぞれ適切な方法でメニューを配置できるようになります。 そのために以下のクラスを公開しました。
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
を取得しますが、カスタム Look & Feel の実装でこれをオーバーライドし、希望するどのような 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);