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);