2012-05-28 24 views
10

我已經看到它在本網站上寫過很多次(例如herehere),在將組件添加到JComponent之前,您絕對不能撥打setVisible(true),但我還沒有看到解釋和關於互聯網似乎很稀缺。爲什麼在添加組件之前我不應該調用setVisible(true)?

爲什麼會出現這種情況,如果違反規則會發生什麼?

+0

你可以把他們說的地方的來源? –

+1

從視覺的角度來看,看到一個仍然有新東西添加到它的組件似乎馬虎(當然,除非這是用戶預期的行爲)。 – Jeffrey

回答

19

如果您先撥打電話,您不會破壞任何內容,但如果您添加了任何內容,則可能需要再次調用它。其他Swing不會呈現添加的組件。您需要讓JVM調用JFrame的paint(...)方法來渲染JFrame的組件,並且setVisible(true)將要求JVM執行此操作。如果您在調用setVisible(true)後添加了組件,並且沒有看到組件,那麼如果重新調整JFrame的大小,您會發現它們會「實現」。這是因爲重新調整它的大小會導致操作系統要求Swing重新繪製GUI,這將導致調用paint(...)

請注意,如果您在創建GUI後添加組件,則可以在其容器上調用revalidate()並經常調用repaint()以獲取正確佈局的新組件,然後進行渲染。 repaint()明確是必要的,如果組件的更改涉及刪除,或組件被繪製在其他組件被以前可視化。

書建議,我高度推薦:Filthy Rich Clients買蓋伊和哈斯。只要購買它!您不會後悔購買。

7

放大@ Hovercraft的有益分析,您可能還必須重新包裝pack()封閉的頂級容器。這example,它在setVisible()後向JList添加元素,可以說明權衡。

相關問題