今天在為了把 JDialog 置中在 JFrame 裏,查到可以用 setLocationRelativeTo 函數置中,但是要如何取得 JFrame 的實體呢?雖然可以在外面建立 JDialog 時,順便呼叫 setLocationRelativeTo 來置中,但是總希望在 JDialog 內自己呼叫置中即可。所以去查了一下,JDialog(Frame owner) 把 owner 設定給誰了。

public JDialog(Frame owner, String title, boolean modal) { super(owner == null? SwingUtilities.getSharedOwnerFrame() : owner, title, modal); ...... } ↓ public Dialog(Window owner, String title, ModalityType modalityType) { super(owner); ...... } ↓ public Window(Window owner) { this(owner == null ? (GraphicsConfiguration)null : owner.getGraphicsConfiguration()); ownedInit(owner); } private void ownedInit(Window owner) { this.parent = owner; if (owner != null) { owner.addOwnedWindow(weakThis); } }

經由上述的 trace code 發現,owner 最後會被指定到 parent 裏,所以只要呼叫 getParent() 即可取得 owner 了。但是如果是透過 JDialog() 取得實體,則 owner 會被指定成 null。

創作者介紹

邱小新の工作筆記

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()