2009-02-16 63 views
6

我有一個非常具體的問題,我想知道是否有方法來更改JDialog的所有者(可以使用構造函數設置它)。我想沒有「官方」的可能性(除了黑客),但我想確保我沒有錯過任何東西。任何想法或提示有關該主題將有所幫助,謝謝已...有沒有辦法改變一個JDialog的擁有者?

+0

爲什麼你甚至想要這樣做? – Bombe 2009-02-16 16:35:28

回答

7

如果你的問題是關於如何在應用程序生命週期中重用對話框,那麼更好的方法是:

  1. 定義您的所有對話內容的JPanel子類
  2. 和實例化一個新的JDialog與現有的JPanel子類的實例

對於第2點,當然你也可以用面板的懶散評估(實例在第一次只用,然後重用)。

您還需要讓面板實現一些(您自己的)接口,允許您重新初始化它們以便在新的JDialog中重用(重新創建通常意味着擦除所有字段的內容,或者將這些字段設置回它們的默認值)。

1

只有我可以想到的事情在不安全的黑客攻擊(使用反射和改變所有者,但可能會改變在不同版本的JVM下即使是來自同一個平臺上的同一個傳感器))。

對於你來說,或許一個更好的問題是「這就是我正在做的事情......我真的需要改變對話的主人還是有更好的方式」?我試圖想要改變業主的理由,我不能拿出任何...

1

記者:

我曾在我的應用程序以服務「註釋」對話框時,表單元格中的文本太長,顯示一個「全球性」對話框中同樣需要。在這種情況下,用戶可以懸停或右鍵單擊單元格並獲得顯示整個文本的對話框。但是,我希望對話框能夠快速顯示,特別是在懸停時,所以我只想簡單地顯示和隱藏它。我決定創建這個對話框並將其存儲在主類中,並將應用程序框架作爲所有者。然後,無論何時任何視圖的所有者是框架都需要筆記對話框,該視圖可以從主類中獲取它。在那些需要對話框的對話框中,父對話框可以用合適的所有者創建一個新的對話框實例。由於這些父對話框(至少在我的應用程序中)在關閉時處理,額外的筆記對話框實例將超出範圍並收集垃圾。希望有所幫助。

相關問題